以编程方式设置TextView的布局权重

我试图dynamic创buildTableRow对象,并将它们添加到TableLayoutTableRow对象有2个项目,一个TextView和一个CheckBoxTextView项目需要将其布局权重设置为1,以将CheckBox项目推送到最右侧。

我无法find有关如何以编程方式设置TextView项目的布局权重的文档。

你必须像这样使用TableLayout.LayoutParams

 TextView tv = new TextView(v.getContext()); tv.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); 

最后一个参数是重量。

答案是你必须使用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

在前面的答案中, weight被传递给一个新的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); 

只需在布局中设置布局参数

创build参数variables

  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 text = new TextView(v.getContext()); text.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); 

(要么)

 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,视图会按照空间移动

你也可以像这样分开给体重,

 LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); lp1.weight=1; 

这个工作对我来说,我希望它也能为你工作

首先设置父视图的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); 

这应该对你有用

 LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParamsMATCH_PARENT); param.weight=1.0f; 

还有另一种方法来做到这一点。 如果您只需要设置一个参数,例如“高度”:

 TextView textView = (TextView)findViewById(R.id.text_view); ViewGroup.LayoutParams params = textView.getLayoutParams(); params.height = ViewGroup.LayoutParams.WRAP_CONTENT; textView.setLayoutParams(params); 

对于一个非常相似的解决scheme,我遇到了相当多的困难:试图在TableRow中使用两个button,每个button都是屏幕宽度的一半。 无论出于何种原因,左边的button总是大约是宽度的70%,右边的button是30%。 调用table_layout.setStretchAllColumns(true)没有效果,也没有将button的宽度设置为屏幕的一半,也没有设置它们的布局权重。

我最终的解决scheme是在TableRows中嵌套一个LinearLayout,它考虑了button宽度的值。

  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; }