2009-07-17 16 views
7

Al usar el SDK de Android, no parece haber ninguna manera de establecer el estilo en una fila de la tabla. Quiero hacer el equivalente a:Establecer estilo en TableRow en Android

<TableRow 
    style='@style/TableRow_classic' > 

en el código. Me gustaría algo como:

TableRow row = new TableRow(this); 
row.setStyle(R.style.TableRow_classic); 

¿Alguien sabe cómo encontrar esto?

Respuesta

3

Por lo que puedo decir, no hay un método setStyle. Puede ir y establecer cada propiedad individual, pero eso frustra el propósito de separar su Vista de la lógica de su controlador. Malo.

¿Alguien ha descubierto cómo asignar dinámicamente estilos?

1

Estoy tratando de establecer propiedades de estilo obtenidas de mi tema en el código.

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 set, int[] attrs, int defStyleAttr, int defStyleRes) 

Aquí 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 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 que no tenga 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 -tan lejos de todos modos.

Parece que el sistema de compilación de Android genera convenientemente el índice correcto para usar en a.getColor y lo nombra R.styleable.MyWidget_background. No hice este nombre, por lo 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

12

La mejor solución que he encontrado para lograr esto es crear un diseño de "parcial" que representa la fila de la tabla, con un estilo definido:

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    style="@style/tr_withborder" /> 

A continuación inflarlo en su código , para utilizar de forma dinámica:

TableRow tr = (TableRow) getLayoutInflater().inflate(R.layout.partial_table_row, null); 

Si bien no es ideal, funciona para mí

Cuestiones relacionadas