通过文档,查到TextView下有这么个方法
setLayoutParams(ViewGroup.LayoutParams params)
但是ViewGroup.LayoutParams这个东西,并没有setMargins方法,LinearLayout.LayoutParams才有,请教下该如何写?
ViewGroup.LayoutParams
setMargins
LinearLayout.LayoutParams
ringa_lee
手冊上這樣講public void setLayoutParams (ViewGroup.LayoutParams params), 『該方法提供一些參數給父視圖,指定了該view在父視圖中的位置(或者說佈局)。 ’
public void setLayoutParams (ViewGroup.LayoutParams params)
Set the layout parameters associated with this view. These supply parameters to the parent of this view specifying how it should be arranged.
如果需要動態改變TextView(或者其它View)的margin屬性(android:layout_marginTop, android:layout_marginBottom, android:layout_marginLeft, android:layout_marginRight),最好是透過程式碼動態來加入這個View,而不是在layout中定義該View。
android:layout_marginTop
android:layout_marginBottom
android:layout_marginLeft
android:layout_marginRight
如果父視圖是LinearLayout,那麼就可以直接呼叫textView.setLayoutParams(params),然後在加入textView到LinearLayout:
LinearLayout
textView.setLayoutParams(params)
LinearLayout layout = (LinearLayout) findViewById(R.id.layoutView); int left, top, right, bottom; left = top = right = bottom = 64; LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(left, top, right, bottom); TextView textView = new TextView(this); textView.setText("A Label"); textView.setLayoutParams(params); layout.addView(textView);
如果父視圖是RelativeLayout 或 FrameLayout,上面的做法無效,解決的辦法是新建一個LinearLayout,然後把textView加給它,再把這個LinearLayout加入給父視圖:
RelativeLayout
FrameLayout
FrameLayout layout = (FrameLayout) findViewById(R.id.layoutView); int left, top, right, bottom; left = top = right = bottom = 64; LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(left, top, right, bottom); TextView textView = new TextView(this); textView.setText("A Label"); textView.setLayoutParams(params); LinearLayout ll = new LinearLayout(this); // + 增加行 ll.setOrientation(LinearLayout.VERTICAL); // + 增加行 ll.addView(textView); // + 增加行 // layout.addView(textView); // - 删除行 layout.addView(ll); // + 增加行
以上程式碼經過測試。
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
所有可以配置Margin的ViewGroup的LayoutParams基本上都來自MarginLayoutParams,這是一個LayoutParams的子類,你在通過getLayoutParams()的時候強制轉換成ViewGroup.MarginLayoutParams即可
Margin
ViewGroup
LayoutParams
MarginLayoutParams
getLayoutParams()
ViewGroup.MarginLayoutParams
重新設定它的Layoutparams就行了
手冊上這樣講
public void setLayoutParams (ViewGroup.LayoutParams params)
, 『該方法提供一些參數給父視圖,指定了該view在父視圖中的位置(或者說佈局)。 ’如果需要動態改變TextView(或者其它View)的margin屬性(
android:layout_marginTop
,android:layout_marginBottom
,android:layout_marginLeft
,android:layout_marginRight
),最好是透過程式碼動態來加入這個View,而不是在layout中定義該View。如果父視圖是
LinearLayout
,那麼就可以直接呼叫textView.setLayoutParams(params)
,然後在加入textView到LinearLayout:如果父視圖是
RelativeLayout
或FrameLayout
,上面的做法無效,解決的辦法是新建一個LinearLayout,然後把textView加給它,再把這個LinearLayout加入給父視圖:以上程式碼經過測試。
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
所有可以配置
Margin
的ViewGroup
的LayoutParams
基本上都來自MarginLayoutParams
,這是一個LayoutParams
的子類,你在通過getLayoutParams()
的時候強制轉換成ViewGroup.MarginLayoutParams
即可重新設定它的Layoutparams就行了