Patrick S.
Patrick S.

Reputation: 275

Android: Creating bullet point list in an Edit Text

I am using an EditText as the main notepad typing area and I want the user to be able to simply click a button and have their note turn into a bullet point list (add the bullet points and a few spaces before the text of each line).

I have figured out something that works, but my main problem is that if the user has a double-newline (a blank line in the note) it adds a bullet point to the empty line.

I tried using Matcher and Pattern with regular expressions, but don't cannot figure out how to avoid adding bullet points to a blank line in an already created set of text.

Here is the code that adds the bullet point to every line except the note title.

//Place text into an array containing the lines.
String[] lines = noteText.split("\n");

for (int i = 0; i < lines.length; i++) {
    //The note title. Don't add a bullet point
    if(i == 0) {
        pad.setText(lines[i]);
    } else {
        pad.append("\n" + "\u2022" + "  " + lines[i]);
    }
}

Upvotes: 1

Views: 2741

Answers (2)

greenrobo
greenrobo

Reputation: 813

Why not check each line and see if it is empty or white text only?

String[] lines = noteText.split("\n");

for (int i = 0; i < lines.length; i++) {
 //The note title. Don't add a bullet point
 if(i == 0) {
    pad.setText(lines[i]);
 } else if (TextUtils.isEmpty(lines[i].trim()) {
    pad.setText(lines[i]);
 } else {
    pad.append("\n" + "\u2022" + "  " + lines[i]);
 }
}

Also, it will be better to simply handle i=0 case outside the loop and not inside. Otherwise you performing the zero check for every iteration which is unnecessary.

Upvotes: 3

Gabe Sechan
Gabe Sechan

Reputation: 93708

If you want something this complicated you may be better off not using an EditText, but writing your own custom view.

Ignoring that, here's a hack that will probably work

str = str.replaceAll("\n*","\n");

That will replace all double, triple, or more than that newlines with a single newline. If you need the newlines, try

str = str.replaceAll("\n{1}", "\n\u2022");

That will look for single newlines and replace them with a newline followed by your bullet point.

Upvotes: 0

Related Questions