2009-07-17 13 views
7

Utilizzando l'SDK di Android, non sembra essere un modo per impostare lo stile su una riga della tabella. Voglio fare l'equivalente di:Imposta stile su TableRow in Android

<TableRow 
    style='@style/TableRow_classic' > 

nel codice. Vorrei qualcosa tipo:

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

Qualcuno sa come trovarlo?

risposta

3

Per quanto posso dire, non esiste un metodo setStyle. È possibile passare e impostare ogni singola proprietà, ma ciò vanifica lo scopo di separare la vista dalla logica del controllore. Cattivo.

Qualcuno ha capito come assegnare dinamicamente gli stili?

1

Io stesso sto cercando di impostare le proprietà di stile ottenuti dal mio tema nel codice.

La ragione è che voglio utilizzare uno stile dal mio tema, MA il mio layout dell'interfaccia utente è interamente generato nel codice (utilizzando un builder di layout personalizzato), senza definire alcun widget in XML. Quindi non posso impostare uno stile nel layout XML del mio widget: non esiste alcun layout XML.

Sto pensando che sarò in grado di impostare questo stile nel codice del mio widget di utilizzando

TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) 

Qui sembra (a me) che

  1. AttributeSet set = null; perché questo è cosa avrebbe fornito l'inflater XML.

  2. int[] attrs = R.styleable.MyWidget; definisce quali attributi che voglio guardare.

  3. int defStyleAttr = myWidgetStyle; che è un riferimento, definito nel mio tema, a uno stile per MyWidget. Questi sono entrambi definiti nei file XML in res/values. “myWidgetStyle” segue lo schema del nome degli sviluppatori di Android hanno usato nel loro codice.

  4. defStyleRes = 0; Spero di non dover pensare a questo.

Quindi per ottenere qualsiasi proprietà, come ad esempio un colore di sfondo,

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

a.recycle(); 

Questo sembra funzionare -così lontano comunque.

Sembra che il sistema di generazione di Android genera convenientemente l'indice corretto da utilizzare in a.getColor e lo nomina R.styleable.MyWidget_background. Non ho fatto questo nome, quindi Android deve averlo fatto usando il mio XML per il mio MyWidget stilizzato.

Mi aspetto che si può cercare l'indice corretto cercando il TypedArray per l'attributo richiesto, ma che sarebbe inefficiente e il TypedArray sembra un aggeggio sgradevole da affrontare. Vorrei usare un bastone molto lungo per batterlo!

Don

12

La soluzione migliore che ho trovato per raggiungere questo obiettivo è quello di creare un layout "parziale" che rappresenta la riga della tabella, con uno stile definito:

<?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" /> 

Poi gonfiare nel codice , di utilizzare in modo dinamico:

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

Anche se non ideale, funziona per me

Problemi correlati