programacion - manual de android en pdf
Establecer el color del lapso de TextView en Android (10)
- crear vista de texto en su diseño
pega este código en tu actividad principal
TextView textview=(TextView)findViewById(R.id.textviewid); Spannable spannable=new SpannableString("Hello my name is sunil"); spannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); textview.setText(spannable); //Note:- the 0,5 is the size of colour which u want to give the strring //0,5 means it give colour to starting from h and ending with space i.e.(hello), if you want to change size and colour u can easily
¿Es posible establecer el color de un lapso de texto en un TextView?
Me gustaría hacer algo similar a la aplicación de Twitter, en la que una parte del texto es azul. Ver imagen a continuación:
Aquí hay una pequeña función de ayuda. ¡Ideal para cuando tienes múltiples idiomas!
private void setColor(TextView view, String fulltext, String subtext, int color) {
view.setText(fulltext, TextView.BufferType.SPANNABLE);
Spannable str = (Spannable) view.getText();
int i = fulltext.indexOf(subtext);
str.setSpan(new ForegroundColorSpan(color), i, i + subtext.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
Establezca el texto de su texto de texto divisible y defina un ForegroundColorSpan para su texto.
TextView textView = (TextView)findViewById(R.id.mytextview01);
Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");
wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(wordtoSpan);
Hay una fábrica para crear el Spannable, y evitar el reparto, así:
Spannable span = Spannable.Factory.getInstance().newSpannable("text");
Otra forma que podría usarse en algunas situaciones es establecer el color del enlace en las propiedades de la vista que está tomando Spannable.
Si su Spannable se va a usar en un TextView, por ejemplo, puede establecer el color del enlace en el XML de esta manera:
<TextView
android:id="@+id/myTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorLink="@color/your_color"
</TextView>
También puedes configurarlo en el código con:
TextView tv = (TextView) findViewById(R.id.myTextView);
tv.setLinkTextColor(your_color);
Si desea más control, es posible que desee comprobar la clase TextPaint
. Aquí es cómo usarlo:
final ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(final View textView) {
//Your onClick code here
}
@Override
public void updateDrawState(final TextPaint textPaint) {
textPaint.setColor(yourContext.getResources().getColor(R.color.orange));
textPaint.setUnderlineText(true);
}
};
Siempre encuentro útiles ejemplos visuales cuando intento entender un nuevo concepto.
Color de fondo
SpannableString spannableString = new SpannableString("Hello World!");
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(backgroundSpan, 0, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
Color de primer plano
SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(foregroundSpan, 0, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
Combinación
SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(foregroundSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(backgroundSpan, 3, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
Estudio adicional
- Explicar el significado de banderas Span como SPAN_EXCLUSIVE_EXCLUSIVE
- Android distribuido, SpannedString, Spannable, SpannableString y CharSequence
Establezca Color en texto pasando Cadena y color :
private String getColoredSpanned(String text, String color) {
String input = "<font color=" + color + ">" + text + "</font>";
return input;
}
Configure el texto en TextView / Button / EditText, etc. llamando al siguiente código:
Vista de texto:
TextView txtView = (TextView)findViewById(R.id.txtView);
Obtener cadena coloreada:
String name = getColoredSpanned("Hiren", "#800000");
Establecer texto en TextView:
txtView.setText(Html.fromHtml(name));
Hecho
Otra respuesta sería muy similar, pero no necesitaría establecer el texto de TextView
dos veces
TextView TV = (TextView)findViewById(R.id.mytextview01);
Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");
wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TV.setText(wordtoSpan);
private SpannableString spannableString(SpannableString spannableString, int start, int end) {
ColorStateList redColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{0xffa10901});
TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, redColor, null);
spannableString.setSpan(highlightSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new BackgroundColorSpan(0xFFFCFF48), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new RelativeSizeSpan(1.5f), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
SpannableString spannableString = new SpannableString("I don''t like Hasina.");
spannableString(spannableString, 8, 14);
textView.setText(spannableString);
Salida: