我正在尝试动态创建TableRow对象,并将它们添加到tableelayout。 TableRow对象有两个项,一个TextView和一个CheckBox。TextView项需要将其布局权重设置为1,以将CheckBox项推到最右边。
我找不到关于如何以编程方式设置TextView项的布局权重的文档。
我正在尝试动态创建TableRow对象,并将它们添加到tableelayout。 TableRow对象有两个项,一个TextView和一个CheckBox。TextView项需要将其布局权重设置为1,以将CheckBox项推到最右边。
我找不到关于如何以编程方式设置TextView项的布局权重的文档。
当前回答
这对我有用,我希望对你也有用
首先为父视图设置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);
其他回答
我遇到了相当大的困难,解决方案非常类似于这个:尝试在TableRow中有两个按钮,每个按钮是屏幕宽度的一半。不管出于什么原因,左键总是在宽度的70%左右,右键是30%。调用table_layout.setStretchAllColumns(true)没有效果,将按钮的宽度设置为屏幕的一半也没有效果,设置它们的布局权重也没有效果。
我最终的解决方案是在TableRows中嵌套线性布局,这确实考虑了按钮宽度的值。
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;
}
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);
1f表示weight=1;你可以给2f或3f,视图将根据空间移动
你必须使用表格布局。LayoutParams是这样的:
TextView tv = new TextView(v.getContext());
tv.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
最后一个参数是权重。
还有另一种方法。如果你只需要设置一个参数,例如'height':
TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);
在前面的回答中,权重被传递给一个新的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);