Сделайте содержание textview как жирным, так и регулярным текстом

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

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

благодаря

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

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

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

    Я решил эту проблему, используя 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; } в 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; } 

    }

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

    Он возвращает SpannableStringBuilder с «textToBold» из «текста» выделенного полужирным шрифтом.

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

     /** * 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; 

    }