2010-07-13 12 views

Respuesta

3

tendrá que configurar manualmente cada elemento del estilo que Cambias, no hay forma de establecer Style en tiempo de ejecución, AFAIK.

myTextView.setTextAppearance 
myTextView.setTextSize 
myTextView.setTextColor 
+0

gracias por su respuesta, pero si quiero quiero añadir más que la casilla de verificación de estrella de forma dinámica. parece que hay una manera conocida de establecer el estilo en tiempo de ejecución. pero en mi caso quiero añadir esta casilla estrellas cómo ¿Puedo hacer esto? –

0

Estoy tratando de hacer algo similar.

Mi razón es que quiero utilizar un estilo de mi propio tema, PERO mi diseño de interfaz de usuario se genera completamente en código (usando un generador de diseño personalizado), sin definir ningún widgets 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 voy a ser capaz de establecer este estilo en el código de mi aparato mediante el uso de

TypedArray a =

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

Aquí parece (a mí) que

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

  2. int [] attrs = R.styleable.MyWidget; define qué atributos quiero ver.

  3. int defStyleAttr = myWidgetStyle; que es una referencia, definida en mi Tema, a un estilo para MyWidget. Ambos están definidos en archivos XML en res/values. "myWidgetStyle" sigue el patrón de nombre que los desarrolladores de Android han usado en su código.

  4. defStyleRes = 0; Espero no tener que pensar en esto.

luego a que cualquier propiedad, tales como 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 de Android genera convenientemente el índice correcto para utilizar en a.getColor y lo nombra R.styleable.MyWidget_background. Yo no hice este nombre yo mismo, así que Android debe haberlo hecho usando mi XML para mi estilo MyWidget.

Supongo que se puede buscar el índice correcto buscando en el TypedArray el atributo requerido, pero eso sería ineficiente y el TypedArray parece un desagradable artilugio. ¡Usaría un palo muy largo para empujarlo!

Don

2

aun así yo no encontré (por desgracia) una manera de cambiar de estilo en tiempo de ejecución.

Si se trata sólo de cambiar la apariencia casilla de verificación (como se menciona en un comentario de otra respuesta), se puede utilizar esta:

myCheckbox.setButtonDrawable(R.drawable.star_checkbox); 

Y tener un archivo en el directorio star_checkbox.xml estirable que describe el casilla de verificación de fondo según sus estados tales 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 necesita los archivos png correspondientes en su directorio dibujable.

25

muy fácil sólo tiene que utilizar setTextApparence y su estilo

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

¿hay algo similar para linearLayout? –

+2

¡No funcionó en absoluto! –

+0

Solo una nota rápida de que 'setTextAppearance (Context context, @StyleRes int resId)' está en desuso y deberíamos usar 'setTextAppearance (@StyleRes int resId)' en su lugar – AllDayAmazing

0

TextView (contexto Contexto, AttributeSet attrs, int defStyle)

Aunque hay construcción disponibles pero parece que su cochecito, yo probamos este y encontró el estilo especificado no se aplicará en mi vista.

después de buscar conseguido aún más este error presentado: http://code.google.com/p/android/issues/detail?id=12683

Para solucionar este problema que estoy usando setBackgroundResource, setTextAppearance, etc métodos drásticamente :)

Cuestiones relacionadas