Сделать текстовое представление как жирным, так и обычным текстом - PullRequest
4 голосов
/ 18 мая 2011

Я использую textview для хранения строки, поступающей из веб-службы.Строка поставляется в таком формате."образец текста {{b}} полужирный текст {{/ b}} и т. д.".Мне нужно показать жирный текст жирным шрифтом в моем текстовом виде.в одной операции я просто могу передать строку.Есть ли у меня возможность использовать строку со свойствами color, font и т.д?

Примечание: у меня нет проблем с синтаксическим анализом текста, я просто хочу найти способ передать мой проанализированный текст в textview

Спасибо

Ответы [ 3 ]

14 голосов
/ 26 августа 2011

Когда вы устанавливаете текст в текстовом представлении, тогда используйте:

mytextview.setText(Html.fromHtml(sourceString));

тогда вы получите текст в реальном формате.

2 голосов
/ 10 апреля 2012

Я решил эту проблему, используя SpannableString, для которого тот, кому нужен код, может изменить этот класс по своему желанию

public class RichTextHelper {
public static SpannableStringBuilder getRichText(String text){
    SpannableStringBuilder builder=new SpannableStringBuilder();     
    String myText=text;
    boolean done=false;
    while(!done){
        if((myText.indexOf("{{b}}")>=0) && (myText.indexOf("{{b}}")<myText.indexOf("{{/b}}"))){
            int nIndex=myText.indexOf("{{b}}");
            String normalText=myText.substring(0,nIndex);
            builder.append(normalText);
            myText=myText.substring(nIndex+5);
        }else if((myText.indexOf("{{/b}}")>=0)){        
            int bIndex=myText.indexOf("{{/b}}");
            String boldText=myText.substring(0,bIndex);
            builder.append(boldText);

            myText=myText.substring(bIndex+6);
            int start=builder.length()-bIndex-1;
            int end =builder.length();//-1;
            if((start>=0) && (end>start)){
                builder.setSpan(new StyleSpan(Typeface.BOLD), start, end, 0);
            }

        }else{
            if(myText.contains("{{/b}}"))
                myText=myText.replace("{{/b}}", "");
            builder.append(myText);
            done=true;
        }
    }

    return builder;
}

}

0 голосов
/ 15 июля 2014

Я думал, что выбранный ответ не дал удовлетворительного результата.Я написал свою собственную функцию, которая принимает 2 строки;Полный текст и часть текста, который вы хотите выделить жирным шрифтом.

Возвращает SpannableStringBuilder с полем 'textToBold' из 'text'.

Я обнаружил возможность сделать подстрокуполужирный, без использования тегов.

/**
 * Makes a substring of a string bold.
 * @param text          Full text
 * @param textToBold    Text you want to make bold
 * @return              String with bold substring
 */

public static SpannableStringBuilder makeSectionOfTextBold(String text, String textToBold){

    SpannableStringBuilder builder=new SpannableStringBuilder();

    if(textToBold.length() > 0 && !textToBold.trim().equals("")){

        //for counting start/end indexes
        String testText = text.toLowerCase(Locale.US);
        String testTextToBold = textToBold.toLowerCase(Locale.US);
        int startingIndex = testText.indexOf(testTextToBold);
        int endingIndex = startingIndex + testTextToBold.length();
        //for counting start/end indexes

        if(startingIndex < 0 || endingIndex <0){
            return builder.append(text);
        }
        else if(startingIndex >= 0 && endingIndex >=0){

            builder.append(text);
            builder.setSpan(new StyleSpan(Typeface.BOLD), startingIndex, endingIndex, 0);
        }
    }else{
        return builder.append(text);
    }

    return builder;

}

...