Kurze Antwort: Wenn Sie in einem benutzerdefinierten Stil angeben layout_margin, muss dieser Stil explizit auf jede einzelne Ansicht angewendet werden, die die angegebene Marge haben möchten (wie gesehen im Codebeispiel unten). Wenn Sie diesen Stil in ein Design einfügen und ihn auf Ihre Anwendung oder eine Aktivität anwenden, funktioniert das nicht.
<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>
Erläuterung: Attribute, die mit layout_
beginnen LayoutParams sind, oder einer ihrer Unterklassen (z.B. MarginLayoutParams). LayoutParams
werden von Ansichten verwendet, um ihren Eltern mitzuteilen, ViewGroup, wie sie angelegt werden sollen.Jede Klasse implementiert eine verschachtelte Klasse, die ViewGroup.LayoutParams
erweitert. Daher sind LayoutParams
spezifisch für den Typ ViewGroup
. Dies bedeutet, dass, während ein TableLayout
und ein LinearLayout
beide layout_margin
als eines von ihnen LayoutParams
haben können, sie als völlig unterschiedliche Attribute betrachtet werden.
Also layout_margin
ist nicht nur ein allgemeines Attribut, das überall angewendet werden kann. Es muss im Rahmen eines ViewGroup
angewendet werden, der es speziell als ein gültiges Argument definiert. Eine Sicht muss aware des Typs des übergeordneten Elements ViewGroup
sein, wenn LayoutParams
angewendet werden. Wenn Sie layout_margin in einem Stil angeben, einschließlich dieses Stils in einem Design, und versuchen, dieses Design auf eine Anwendung/Aktivität anzuwenden, werden die Layoutattribute gelöscht, da noch kein ViewGroup-Parent angegeben wurde und die Argumente somit vorhanden sind ungültig. Das Anwenden des Stils auf eine EditText
Ansicht, die mit einer TableLayout
definiert wurde, funktioniert jedoch, da der Stamm ViewGroup
(der TableLayout
) bekannt ist.
Quellen:
Android-Dokumentation auf Layout Parameters.
Antwort gegeben this question von Android Framework Engineer und StackOverflow Benutzer adamp.
Antwort auch gegeben this question von StackOverflow Benutzer inazaruk.
Ich möchte nicht jede Kredit dieser Antwort die echter Held ist hier - https://stackoverflow.com/a/13365288/4741746
gut, ich mit einer Vermeidung des Problems geführt. Anstatt die Marge zu setzen, habe ich nur die Schaltfläche unterhalb der Eigenschaft angegeben. d. h., die Knöpfe 2, 3 und 4 sind zum Beispiel unterhalb von Knopf 1 angeordnet. Ich habe keinen anderen Ausweg gefunden. – kiki