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

时间:2010-07-11 18:30:07

标签: android layout textview android-layout-weight

我正在尝试动态创建TableRow个对象并将其添加到TableLayoutTableRow个对象有2个项目,TextViewCheckBoxTextView项需要将其布局权重设置为1才能将CheckBox项目推送到最右侧。

我找不到有关如何以编程方式设置TextView项目的布局权重的文档。

12 个答案:

答案 0 :(得分:350)

您必须使用TableLayout.LayoutParams这样的内容:

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

最后一个参数是重量。

答案 1 :(得分:93)

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

答案 2 :(得分:37)

在之前的答案中, 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);

答案 3 :(得分:15)

TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);

1f表示权重= 1;你可以给2f或3f,视图将根据空间移动

答案 4 :(得分:12)

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

创建参数变量

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

答案 5 :(得分:11)

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,视图将根据空间移动。要在线性布局中创建视图之间的指定距离,请使用 weightsum 作为“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);

答案 6 :(得分:6)

你也可以像这样单独给予体重,

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

 lp1.weight=1;

答案 7 :(得分:6)

这应该对你有用

values.unshift(new Date());

答案 8 :(得分:5)

这项工作对我来说,我希望它也适合你

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

答案 9 :(得分:1)

还有另一种方法可以做到这一点。如果您只需要设置一个参数,例如'height':

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

答案 10 :(得分:0)

挣扎4小时后。 最后,这段代码对我有用。

连续3列。

  TextView serialno = new TextView(UsersActivity.this);
  TextView userId = new TextView(UsersActivity.this);
  TextView name = new TextView(UsersActivity.this);

  serialno.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
  userId.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
  name.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));

答案 11 :(得分:-1)

我遇到了一个与此非常相似的解决方案的难度:尝试在TableRow中有两个按钮,每个按钮都是屏幕宽度的一半。无论出于何种原因,左按钮总是约为宽度的70%,右按钮为30%。调用table_layout.setStretchAllColumns(true)没有效果,也没有将按钮的宽度设置为屏幕的一半,也没有设置其布局权重。

我最终得到的解决方案是在TableRows中嵌套一个LinearLayout,其中<​​em> 考虑了按钮宽度的值。

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