Установите маску макета TextView программно

Я пытаюсь динамически создавать объекты TableRow и добавлять их к TableLayout. Объекты TableRow имеют 2 элемента, a TextView и a CheckBox. Элементы TextView должны иметь свой вес макета, установленный в 1, чтобы нажимать элементы CheckBox в крайнем правом углу.

Я не могу найти документацию о том, как программно установить вес макета элемента TextView.

+204
11 июл. '10 в 18:30
источник поделиться
12 ответов

Вы должны использовать TableLayout.LayoutParams с чем-то вроде этого:

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

Последний параметр - вес.

+348
11 июл. '10 в 19:33
источник

Ответ заключается в том, что вам нужно использовать 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

+93
31 июл. '12 в 16:06
источник

В более ранних ответах вес передается конструктору нового объекта 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);
+37
03 мая '14 в 22:52
источник
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);

1f обозначается как вес = 1; вы можете дать 2f или 3f, представления будут перемещаться в соответствии с пространством

+15
29 февр. '16 в 7:15
источник

просто установите параметры макета в этот макет, например

создать переменную параметра

 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);
+12
04 мая '13 в 9:08
источник
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);
+11
08 дек. '14 в 11:52
источник

Вы также можете придавать весу отдельно,

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

 lp1.weight=1;
+6
08 февр. '14 в 10:33
источник

Это должно работать для вас

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParams.MATCH_PARENT);

param.weight=1.0f;
+6
08 авг. '16 в 11:36
источник

Эта работа для меня, и я надеюсь, что она будет работать и для вас.

Сначала установите LayoutParams для родительского представления:

myTableLayout.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT,
                TableLayout.LayoutParams.FILL_PARENT));

затем установите для TextView (child):

 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); 
+5
20 авг. '12 в 23:34
источник

Есть и другой способ сделать это. Если вам нужно установить только один параметр, например 'height':

TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);
+1
28 янв. '14 в 19:04
источник

После борьбы в течение 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));
0
20 апр. '19 в 15:18
источник

У меня была довольно сложная проблема с решением, которое очень похоже на это: попытка иметь две кнопки в TableRow, причем каждая из них имеет половину ширины экрана. По какой-то причине левая кнопка всегда будет составлять около 70% от ширины, а правая кнопка - 30%. Вызов table_layout.setStretchAllColumns(true) не имел никакого эффекта, не устанавливал ширину кнопки на половину экрана и не устанавливал их вес макета.

Решением, в котором я закончил, было вложение LinearLayout в 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;
        }
-1
02 сент. '11 в 20:03
источник

Посмотрите другие вопросы по меткам или Задайте вопрос