Risposta breve: Se si specifica layout_margin in uno stile personalizzato, questo stile deve essere applicato in modo esplicito ad ogni singolo vista che si desidera avere il margine specificato (come si vede nell'esempio di codice riportato di seguito). Includere questo stile in un tema e applicarlo alla tua applicazione o un'attività non funzionerà.
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF" >
<TableRow>
<EditText android:hint="@string/last_name" style="@style/edit_text_default" />
</TableRow>
<TableRow>
<EditText android:hint="@string/first_name" style="@style/edit_text_default" />
</TableRow>
</TableLayout>
Spiegazione: attributi che iniziano con layout_
sono LayoutParams, o una delle sue sottoclassi (per esempio MarginLayoutParams). LayoutParams
vengono utilizzati dalle viste per comunicare al genitore ViewGroup come desiderano essere disposti.Ogni classe ViewGroup
implementa una classe nidificata che estende ViewGroup.LayoutParams
. Pertanto, LayoutParams
sono specifici per il tipo di ViewGroup
. Ciò significa che mentre uno TableLayout
e uno LinearLayout
possono entrambi avere layout_margin
come uno di esso è LayoutParams
, sono considerati attributi completamente diversi.
Quindi layout_margin
non è solo un attributo generale che può essere applicato ovunque. Deve essere applicato nel contesto di un ViewGroup
che lo definisce specificamente come argomento valido. Una vista deve essere consapevole del tipo della sua madre ViewGroup
quando si applica LayoutParams
.
Specificare layout_margin in uno stile, incluso quello stile in un tema, e tentare di applicare quel tema a un'applicazione/attività comporterà la caduta degli attributi di layout, perché nessun genitore di ViewGroup è stato ancora specificato e quindi gli argomenti sono non valido. Tuttavia, l'applicazione dello stile a una vista EditText
che è stata definita con un TableLayout
funziona, poiché è noto il genitore ViewGroup
(TableLayout
).
Fonti:
documentazione Android su Layout Parameters.
Risposta data a this question dall'ingegnere di framework Android e dall'utente StackOverflow adamp.
Inoltre, rispondere a this question da StackOverflow utente inazaruk.
Non voglio alcun credito di questa risposta il vero eroe è qui - https://stackoverflow.com/a/13365288/4741746
fonte
2017-08-01 12:57:40
bene, sono riuscito con una soluzione. Invece di impostare il margine, ho appena specificato il pulsante sotto la proprietà. per esempio, i pulsanti 2, 3 e 4 sono allineati sotto il pulsante 1. Non ho trovato altra via d'uscita. – kiki