style font family java android textview

java - font - Android: ¿configura TextView TextStyle mediante programación?



set style programmatically android (8)

Busque setTextAppearance o también setTextTypeface . Hay una pregunta similar en stackoverflow: Cómo cambiar el estilo de un TextView en tiempo de ejecución

¿Hay alguna manera de establecer el atributo textStyle de un TextView programmatically? No parece haber un método setTextStyle() .

Para ser claro, ¡no estoy hablando de estilos de visualización / widgets! Estoy hablando de lo siguiente:

<TextView android:id="@+id/my_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World" android:textStyle="bold" />


Digamos que tienes un estilo llamado RedHUGEText en tus valores / styles.xml:

<style name="RedHUGEText" parent="@android:style/Widget.TextView"> <item name="android:textSize">@dimen/text_size_huge</item> <item name="android:textColor">@color/red</item> <item name="android:textStyle">bold</item> </style>

Simplemente cree su TextView como de costumbre en el archivo XML layout / your_layout.xml, digamos:

<TextView android:id="@+id/text_view_title" android:layout_width="fill_parent" android:layout_height="wrap_content android:text="FOO" />

Y en el código java de tu Actividad haces esto:

TextView textViewTitle = (TextView) findViewById(R.id.text_view_title); textViewTitle.setTextAppearance(this, R.style.RedHUGEText);

¡Funcionó para mí! Y aplica color, tamaño, gravedad, etc. Lo he usado en teléfonos y tabletas con niveles de API de Android de 8 a 17 sin problemas.

Recuerde ... esto es útil solo si el estilo del texto realmente depende de una condición en su lógica de Java o está construyendo la UI "sobre la marcha" con código ... si no es así, es mejor simplemente hacer:

<TextView android:id="@+id/text_view_title" android:layout_width="fill_parent" android:layout_height="wrap_content android:text="FOO" style="@style/RedHUGEText" />

¡Siempre puedes tenerlo a tu manera!

¡Espero eso ayude!


Esta pregunta se hace en muchos lugares de muchas maneras diferentes. Originalmente lo contesté aquí, pero creo que también es relevante en este hilo (ya que terminé here cuando estaba buscando una respuesta).

No hay una sola solución de línea para este problema, pero esto funcionó para mi caso de uso. El problema es que el constructor ''Ver (context, attrs, defStyle)'' no se refiere a un estilo real, sino que quiere un atributo. Entonces, haremos:

  1. Definir un atributo
  2. Crea un estilo que quieras usar
  3. Aplica un estilo para ese atributo en nuestro tema
  4. Crea nuevas instancias de nuestra vista con ese atributo

En ''res / values ​​/ attrs.xml'', defina un nuevo atributo:

<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="customTextViewStyle" format="reference"/> ... </resources>

En res / values ​​/ styles.xml ''voy a crear el estilo que quiero usar en mi TextView personalizado

<style name="CustomTextView"> <item name="android:textSize">18sp</item> <item name="android:textColor">@color/white</item> <item name="android:paddingLeft">14dp</item> </style>

En ''res / values ​​/ themes.xml'' o ''res / values ​​/ styles.xml'', modifique el tema para su aplicación / actividad y agregue el siguiente estilo:

<resources> <style name="AppBaseTheme" parent="android:Theme.Light"> <item name="@attr/customTextViewStyle">@style/CustomTextView</item> </style> ... </resources>

Finalmente, en su TextView personalizado, ahora puede usar el constructor con el atributo y recibirá su estilo

public class CustomTextView extends TextView { public CustomTextView(Context context) { super(context, null, R.attr.customTextView); } }

Merece la pena señalar que utilicé CustomTextView repetidamente en diferentes variantes y lugares diferentes, pero de ninguna manera es necesario que el nombre de la vista coincida con el estilo o el atributo ni nada. Además, esta técnica debería funcionar con cualquier vista personalizada, no solo con TextViews.


Esto funcionó para mí

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

o

textview.setTypeface(Typeface.DEFAULT_BOLD);


Lo he resuelto con dos métodos simples.

Sigue la explicación.

Mi declaración de estilo existente:

<style name="SearchInfoText"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textSize">24sp</item> <item name="android:textColor">@color/Church_Grey</item> <item name="android:shadowColor">@color/Shadow_Church</item> <item name="android:shadowRadius">3</item> <item name="android:shadowDx">1</item> <item name="android:shadowDy">1</item> </style>

Mi código Android de Java:

TextView locationName = new TextView(getSupportActivity()); locationName.setId(IdGenerator.generateViewId()); locationName.setText(location.getName()); locationName.setLayoutParams(super.centerHorizontal()); locationName.setTextSize(24f); locationName.setPadding(0, 0, 0, 15); locationName.setTextColor(getResources().getColor(R.color.Church_Grey)); locationName.setShadowLayer(3, 1, 1, getResources().getColor(R.color.Shadow_Church));

Saludos.



Muchas maneras de lograr esta tarea algunas están a continuación:

1.

String text_view_str = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!"; TextView tv = (TextView)findViewById(R.id.ur_text_view_id); tv.setText(Html.fromHtml(text_view_str));

2.

tv.setTypeface(null, Typeface.BOLD); tv.setTypeface(null, Typeface.ITALIC); tv.setTypeface(null, Typeface.BOLD_ITALIC); tv.setTypeface(null, Typeface.NORMAL);

3.

SpannableString spannablecontent=new SpannableString(o.content.toString()); spannablecontent.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 0,spannablecontent.length(), 0); // set Text here tt.setText(spannablecontent);

4.

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="boldText"> <item name="android:textStyle">bold|italic</item> <item name="android:textColor">#FFFFFF</item> </style> <style name="normalText"> <item name="android:textStyle">normal</item> <item name="android:textColor">#C0C0C0</item> </style> </resources> tv.setTextAppearance(getApplicationContext(), R.style.boldText);

o si quieres a través de xml

android:textStyle="normal" android:textStyle="normal|bold" android:textStyle="normal|italic" android:textStyle="bold" android:textStyle="bold|italic"


textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypeface es Attribute textStyle.

Como Shankar V agregó, para preservar los atributos tipográficos previamente establecidos, puede usar:

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);