Android-establecer TextView Estilo de texto mediante programación?


¿Hay una manera de establecer el atributo textStyle de un TextView mediante programación? No parece haber un método setTextStyle().

Para ser claro, no estoy hablando de estilos de vista / Widget! 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" />
Author: Jake Wilson, 2011-10-27

9 answers

textview.setTypeface(Typeface.DEFAULT_BOLD);

SetTypeface es el atributo textStyle.

Como se agregó Shankar V, para preservar los atributos de tipo de letra previamente establecidos puede usar:

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);
 303
Author: Raz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-26 20:26:54

Digamos que tienes un estilo llamado RedHUGEText en tus valores/estilos.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 crea tu TextView como de costumbre en el layout XML/your_layout.archivo 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 aplicó color, tamaño, gravedad, etc. Lo he utilizado en teléfonos y tabletas con niveles de API de Android de 8 a 17 sin problemas.

Recuerda... esto es útil solo si el estilo del texto realmente depende de una condición en su lógica Java o está construyendo la interfaz de usuario "sobre la marcha" con código... si no lo hace, 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 hacerlo a tu manera!

Espero que ayude!

 98
Author: Oscar Salguero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-18 21:26:54

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

 57
Author: peter.bartos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:33

Muchas maneras de lograr esta tarea algunas están abajo: -

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 lo desea a través de xml

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"
 42
Author: duggu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-04 17:15:46

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

No hay una solución de línea única para este problema, pero esto funcionó para mi caso de uso. El problema es que el constructor' View(context, attrs, defStyle) ' no se refiere a un estilo real, sino que quiere un atributo. Por lo tanto, vamos a:

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

En 'res/values/attrs.xml', define 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 de su aplicación / actividad y agregue lo siguiente estilo:

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

Finalmente, en su personalizados TextView, ahora se puede utilizar el constructor con el atributo y recibirá su estilo

public class CustomTextView extends TextView {

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

Vale la pena señalar que he utilizado repetidamente customTextView en diferentes variantes y diferentes lugares, pero de ninguna manera es necesario que el nombre de la vista coincida con el estilo o el atributo o cualquier cosa. Además, esta técnica debería funcionar con cualquier vista personalizada, no solo con vistas de texto.

 5
Author: Kevin Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:22

Esto funcionó para mí

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

O

textview.setTypeface(Typeface.DEFAULT_BOLD);
 3
Author: Ray Hunter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-12 23:12:08

Lo he resuelto con dos métodos simples.

Siga 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 Java de Android:

    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.

 1
Author: andresmafra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-24 15:29:42

***** Versión Kotlin * * * * *

Para conservar la fuente actual además del estilo de texto:

textView.apply {
    setTypeface(typeface, Typeface.NORMAL)
    // or
    setTypeface(typeface, Typeface.BOLD)
    // or
    setTypeface(typeface, Typeface.ITALIC)
    // or
    setTypeface(typeface, Typeface.BOLD_ITALIC)
}
 1
Author: aminography,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-29 13:42:45

Echa un vistazo a esto.

Esta característica no está soportada actualmente.

¿Cómo establecer el atributo Style mediante programación en Android?

 0
Author: dcanh121,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:32