android - tamaño - Cree contenido textview con texto en negrita y regular
propiedades textview android (3)
Estoy usando una vista de texto para contener una cadena proveniente de un servicio web. String viene con un formato como este. "texto de muestra {{b}} texto en negrita {{/ b}} y así sucesivamente". Necesito mostrar el texto en negrita en negrita en mi texto. en una sola operación solo puedo pasar la cadena. ¿Tengo la oportunidad de usar una cadena con propiedades de color, fuente, etc.?
Nota: No tengo problemas con el análisis del texto. Solo quiero encontrar una manera de pasar mi texto analizado a la vista de texto.
Gracias
Cuando configura el texto en su vista de texto, use:
mytextview.setText(Html.fromHtml(sourceString));
entonces obtendrás el texto en formato real.
Pensé que la respuesta elegida no proporcionaba un resultado satisfactorio. He escrito mi propia función que requiere 2 cadenas; El texto completo y la parte del texto que desea resaltar.
Devuelve un SpannableStringBuilder con ''textToBold'' de ''texto'' en negrita.
Encuentro la capacidad de hacer una subcadena negrita sin envolverla en etiquetas útiles.
/**
* 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;
}
Resolví este problema usando SpannableString, para quién necesita código, puede cambiar esta clase como lo desee
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;
}
}