答案很簡單:如果您在自定義樣式指定layout_margin,這種風格必須明確地應用到您希望所指定的空白每一個人視圖(如圖在下面的代碼示例中)。將此樣式包含在主題中並將其應用於您的應用程序或活動將不起作用。
<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>
說明:屬性,其與layout_
開始是LayoutParams,或者它的子類中的一個(例如MarginLayoutParams)。 LayoutParams
被視圖用來告訴他們的父母ViewGroup他們想如何擺放。每個ViewGroup
類都實現了一個嵌套類,它擴展了ViewGroup.LayoutParams
。因此,LayoutParams
特定於ViewGroup
的類型。這意味着雖然TableLayout
和LinearLayout
可能都具有layout_margin
作爲其中一個LayoutParams
,但它們被認爲是完全不同的屬性。
因此layout_margin
不只是一般屬性,可以在任何地方應用。它必須在ViewGroup
的範圍內應用,將其明確定義爲有效參數。當應用LayoutParams
時,視圖必須是,其識別其父類型ViewGroup
。
指定樣式中的layout_margin(包括該樣式在主題中),並試圖將該主題應用於應用程序/活動將導致佈局屬性被刪除,因爲尚未指定ViewGroup父項,因此參數爲無效。但是,將樣式應用於已用TableLayout
定義的EditText
視圖可行,因爲父類ViewGroup
(TableLayout
)是已知的。
來源:
上Layout Parameters Android文檔。
Android框架工程師和StackOverflow用戶adamp給出的this question的回答。
此外,StackOverflow用戶inazaruk給出的this question的回答。
我不希望這個答案的真正的英雄的任何信用是在這裏 - https://stackoverflow.com/a/13365288/4741746
好,我有一個解決辦法進行管理。我只是在屬性下面指定了按鈕,而不是設置保證金。例如,指定按鈕2,3和4在按鈕1下方對齊。我沒有找到任何其他出路。 – kiki 2011-07-01 06:50:55