Android: establece el estilo textView en tiempo de ejecución

Es cualquier cuerpo sabe cómo establecer el estilo fore textView en tiempo de ejecución:

algo como esto

myTextView.setStyle(R.style.mystyle); 

Muy fácil solo usa setTextApparence y tu estilo

  myTextView.setTextAppearance(getApplicationContext(), R.style.boldText); 

Tendrá que configurar manualmente cada elemento del estilo que cambie, no hay manera de setStyle en tiempo de ejecución, AFAIK.

 myTextView.setTextAppearance myTextView.setTextSize myTextView.setTextColor 

También todavía no encontré (tristemente) una manera de cambiar el estilo en tiempo de ejecución.

Si se trata simplemente de cambiar la apariencia de la casilla de verificación (como mencionas en un comentario de otra respuesta), puedes usar esto:

 myCheckbox.setButtonDrawable(R.drawable.star_checkbox); 

Y tiene un archivo star_checkbox.xml en el directorio descriptable que describe el fondo de la casilla de verificación según sus estados como:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:state_focused="true" android:drawable="@drawable/star_checkbox_checked_focused" /> <item android:state_checked="false" android:state_focused="true" android:drawable="@drawable/checkbox_not_checked_focused" /> <item android:state_checked="false" android:drawable="@drawable/checkbox_not_checked" /> <item android:state_checked="true" android:drawable="@drawable/checkbox_checked" /> </selector> 

También necesitas los archivos png correspondientes en tu directorio.

Estoy tratando de hacer algo similar.

Mi razón es que quiero usar un estilo de mi propio tema, pero mi diseño de interfaz de usuario se genera completamente en código (utilizando un constructor de diseño personalizado), sin definir ningún widget en XML. Así que no puedo establecer un estilo en el diseño XML de mi widget – no hay ningún diseño XML.

Estoy pensando que podré fijar este estilo en el código de mi widget usando

TypedArray a =

Context.obtainStyledAttributes (conjunto de AttributeSet, int [] attrs, int defStyleAttr, int defStyleRes)

Aquí me parece (a mí) que

  1. AttributeSet set = null; Porque esto es lo que el inflador XML habría proporcionado.

  2. Int [] attrs = R.styleable.MyWidget; Define qué atributos quiero mirar.

  3. Int defStyleAttr = myWidgetStyle; Que es una referencia, definida en mi Tema, a un estilo para MyWidget. Ambos se definen en archivos XML en res / values. "MyWidgetStyle" sigue el patrón de nombre que los desarrolladores de android han utilizado en su código.

  4. DefStyleRes = 0; Espero que no tenga que pensar en esto.

A continuación, para obtener cualquier propiedad, como un color de fondo,

Color color = a.getColor (R.styleable.MyWidget_background, R.color.my_default);

A.recycle ();

Esto parece funcionar, de todos modos.

Parece que el sistema de compilación android genera convenientemente el índice correcto para usar en a.getColor, y lo nombra R.styleable.MyWidget_background. No hice este nombre yo mismo, por lo que Android debe haberlo hecho usando mi XML para MyWidget con estilo.

Espero que uno puede buscar el índice correcto mediante la búsqueda de TypedArray para el atributo requerido, pero que sería ineficiente y TypedArray se ve como un desagradable contraption a tratar. Yo usaría un palo muy largo para empujarlo!

Don

TextView (Contexto contexto, AtributoSet attrs, int defStyle)

Aunque no hay construcción disponible, pero parece que su buggy, he intentado esto y encontró estilo especificado no se aplicará en mi opinión.

Después de buscar más, consiguió este error archivado: http://code.google.com/p/android/issues/detail?id=12683

Para solucionar este problema estoy usando setBackgroundResource, setTextAppearance, etc métodos dramáticamente 🙂

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.