通过文档,查到TextView下有这么个方法
setLayoutParams(ViewGroup.LayoutParams params)
但是ViewGroup.LayoutParams
这个东西,并没有setMargins
方法,LinearLayout.LayoutParams
才有,请教下该如何写?
黄舟2017-04-17 14:57:10
手册上这样讲public void setLayoutParams (ViewGroup.LayoutParams params)
, 『该方法提供一些参数给父视图,指定了该view在父视图中的位置(或者说布局)。』
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。
如果父视图是LinearLayout
,那么就可以直接调用textView.setLayoutParams(params)
,然后在添加textView到LinearLayout:
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添加给父视图:
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); // + 增加行
以上代码经过测试。
阿神2017-04-17 14:57:10
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
所有可以配置Margin
的ViewGroup
的LayoutParams
基本都来自MarginLayoutParams
,这是一个LayoutParams
的子类,你在通过getLayoutParams()
的时候强制转换成ViewGroup.MarginLayoutParams
即可