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

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

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

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

В более ранних ответах вес передается конструктору нового объекта 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);

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

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

 lp1.weight=1;

Ответ 8

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

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

param.weight=1.0f;

Ответ 9

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

Сначала установите 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); 

Ответ 10

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

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

Ответ 11

После борьбы в течение 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));

Ответ 12

У меня была довольно сложная проблема с решением, которое очень похоже на это: попытка иметь две кнопки в 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;
        }