我试图动态创建TableRow
对象并将它们添加到TableLayout
。 TableRow
对象有2个项目,TextView
和CheckBox
。 TextView
项目需要将其布局权重设置为1,以将CheckBox
项目推到最右侧。以编程方式设置TextView的布局权重
我无法找到有关如何以编程方式设置TextView
项目的布局权重的文档。
我试图动态创建TableRow
对象并将它们添加到TableLayout
。 TableRow
对象有2个项目,TextView
和CheckBox
。 TextView
项目需要将其布局权重设置为1,以将CheckBox
项目推到最右侧。以编程方式设置TextView的布局权重
我无法找到有关如何以编程方式设置TextView
项目的布局权重的文档。
你必须使用TableLayout.LayoutParams
像这样的东西:
TextView tv = new TextView(v.getContext());
tv.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
最后一个参数是重量。
我在解决方案上遇到了相当多的困难:尝试在TableRow中使用两个按钮,每个按钮都是屏幕宽度的一半。无论出于何种原因,左侧的按钮总是大约70%的宽度,而右侧的按钮总是大约30%。调用table_layout.setStretchAllColumns(true)没有效果,也没有将按钮的宽度设置为屏幕的一半,也没有设置它们的布局权重。
我最终解决的解决方案是在TableRows中嵌套LinearLayout,确实在中考虑了按钮宽度的值。
TableLayout layout = new TableLayout(this);
TableRow top_row = new TableRow(this);
left_button = styleButton();
right_button = styleButton();
LinearLayout toprow_layout = new LinearLayout (this);
toprow_layout.setOrientation(LinearLayout.HORIZONTAL);
toprow_layout.addView (left_button);
toprow_layout.addView(right_button);
toprow.addView(top_layout);
layout.addView(top_row)
private Button styleButton() {
Button btn = new Button (this);
android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
btn.setWidth((int)(display.getWidth()/2)); // set width to half
btn.setHeight(((int)display.getHeight()/6)); // set height to whatevs
btn.setText("foo");
return btn;
}
为了您的未来,解决方案是将TableRow,Button1和Button2都设置为'layout_width = fill_parent',在完成后,为button1和button2设置'layout_weight = 1'。所有具有fill_parent和layout_weight = 1的元素在通货膨胀时将被赋予相同的大小。 – edthethird 2012-03-02 18:00:36
答案是,你必须使用TableRow.LayoutParams,不LinearLayout.LayoutParams或任何其他的LayoutParams。
TextView tv = new TextView(v.getContext());
LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);
不同的LayoutParams是不可互换的,如果你使用错误的,那么似乎什么都不会发生。该文本视图的父表中的行,因此:
http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html
这个答案帮了我很多... TableLayout没有为我工作 – 2014-09-18 09:40:58
唉,你为我节省了很多时间。它在哪里指定?我没有发现任何关于你的文档不能交换'LayoutParams' – 2015-01-07 19:45:56
'TableRow.LayoutParams'也为我工作 – 2015-02-08 22:54:30
这项工作对我来说,我希望它会为你工作也
设置的LayoutParams父视图第一:
myTableLayout.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.FILL_PARENT));
然后TextView的(孩子)设置:
TableLayout.LayoutParams textViewParam = new TableLayout.LayoutParams
(TableLayout.LayoutParams.WRAP_CONTENT,
TableLayout.LayoutParams.WRAP_CONTENT,1f);
//-- set components margins
textViewParam.setMargins(5, 0, 5,0);
myTextView.setLayoutParams(textViewParam);
刚刚成立的布局PARAMS在布局像
创建PARAM变量
android.widget.LinearLayout.LayoutParams params = new android.widget.LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f);
1F是权重参数
设置像
TextView text = (TextView) findViewById(R.id.text);
text.setLayoutParams(params);
你的部件或布局还有另一种方式来做到这一点。如果您需要设置唯一的一个参数,例如“高度”:
TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);
注意,不是为2.3 – djdance 2016-09-28 20:35:47
您也可以单独给重这样,
LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
lp1.weight=1;
在前面的答案重量被传递到一个新的SomeLayoutType.LayoutParams对象的构造函数。 仍然在许多情况下,它更方便地使用现有的对象 - 它有助于避免与参数处理我们不感兴趣的
一个例子:
// Get our View (TextView or anything) object:
View v = findViewById(R.id.our_view);
// Get params:
LinearLayout.LayoutParams loparams = (LinearLayout.LayoutParams) v.getLayoutParams();
// Set only target params:
loparams.height = 0;
loparams.weight = 1;
v.setLayoutParams(loparams);
TextView text = new TextView(v.getContext());
text.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, 1f));
(OR)
TextView tv = new TextView(v.getContext());
LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);
。
1f表示权重= 1;根据你的需要,你可以给2f或3f,视图会根据空间移动。为了在“线性布局”中为视图之间指定距离,请使用“LinearLayout”的权重。
LinearLayout ll_Outer= (LinearLayout) view.findViewById(R.id.linearview);
LinearLayout llInner = new LinearLayout(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent);
llInner.Orientation = Orientation.Horizontal;
llInner.WeightSum = 2;
ll_Outer.AddView(llInner);
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);
1F是表示作为权重= 1;你可以给2F或3F,意见将移动accoding的空间
这应该工作到您
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParamsMATCH_PARENT);
param.weight=1.0f;
之前我没有提到这一点,所以我很抱歉。但我在询问我的问题之前尝试了这一点。它使TextView从布局中消失。但是,从积极的角度来看,我发现将TableLayout的stretch_columns属性设置为0会导致我正在查找的效果(TextView在左边,CheckBox在右边)。 感谢您的帮助。 – eugene 2010-07-12 00:35:17
如果你正在导入一个XML布局,并且你没有动态地创建你的布局,你可以像这样抓住它:'TextView tv =(TextView)findViewById(R.id.your_textview_inside_the_linearlayout); tv.setLayoutParams(新的LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,0.1f));' – 2012-04-13 20:51:13
要以编程方式设置布局权重,应该使用'TableRow.LayoutParams'而不是'TableLayout.LayoutParams'。见@多杰的回答。 – Halil 2014-08-28 12:56:36