2013-03-22 5 views
5

Aggiungo un pulsante in modo programmatico alla mia vista Android esistente, quando l'utente tocca un altro pulsante. Funziona in termini di funzionalità, ma alcune informazioni sullo stile sembrano essere ignorate.Android - L'aggiunta di una vista ignora programmaticamente alcuni attributi di stile

Sto aggiungendo il pulsante con un layout separato contenente solo il pulsante, con il valore di stile pre-riempito.

<Button xmlns:android="http://schemas.android.com/apk/res/android" style="@style/FileStorageDeleteButton"></Button>

Utilizzando getLayoutInflater, io sono quindi in grado di aggiungere questo pulsante per il layout.

buttonDelete = (Button) getLayoutInflater().inflate(R.layout.pete_button_filedelete, null);

LinearLayout layout = (LinearLayout)findViewById(R.id.layoutFileStorage);

layout.addView(buttonDelete, 1);

Ho un file XML nella directory valori che imposta il colore, ecc del testo per @style/FileStorageDeleteButton, la maggior parte dei quali vengono utilizzati dal pulsante quando è aggiunto . Ma per qualche motivo i quattro attributi di margine e layout_below vengono ignorati.

Non vedo errori nel LogCat quando viene visualizzato questo pulsante, è come se lo stile semplicemente non fosse applicato. Se includo il pulsante manualmente nell'XML per quel layout, utilizza correttamente tutti gli stili.

Qualsiasi aiuto molto apprezzato.

risposta

3

È necessario passare i parametri di layout quando si chiama addView() poiché i parametri di layout non sono rilevanti per una singola vista, vengono sempre presi nel contesto della vista circostante . Esistono varianti di addView() che prendono un argomento LayoutParams.

EDIT Aggiungere ulteriori dettagli

È necessario creare un insieme di LinearLayout.LayoutParams e impostare i margini in là, poi passare che a addView()

layout_below viene ignorato per ogni caso un LinearLayout (tale attributo è rilevante solo per un RelativeLayout. Quando si chiama addView(buttonDelete, 1) si sta dicendo dove mettere la vista nel layout lineare

+0

Grazie David - il tuo post mi ha inviato nella giusta direzione per trovare che posso p Assumere più variabili in Gonfiamento. Ora usando 'buttonDelete = (Button) getLayoutInflater(). Gonfia (R.layout.pete_button_filedelete, layout, false);', sebbene 'layout_below' sia ancora ignorato. Posso aggirare questo, ma mi chiedo solo perché quello non funziona ancora? Grazie ancora! Se avessi la reputazione di revocarti, vorrei :) –

+0

'layout_below' è usato solo per un' RelativeLayout'. Il tuo 'LinearLayout' ignora questo attributo. In un 'LinearLayout' puoi controllare sopra/sotto usando la posizione della vista all'interno del layout. –