it-swarm.com.ru

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

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

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

204
eugene

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

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

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

350
Macarse

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

В предыдущих ответах 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);
37
sberezin
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);

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

15
user5967758

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

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

 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
Manikandan
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, представления будут перемещаться в соответствии с пространством. Для определения заданного расстояния между видами в линейном макете используйте 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);
11
anand krish

Вы также можете дать вес отдельно, как это,

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

 lp1.weight=1;
7
kiran boghra

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

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

param.weight=1.0f;
7
Ashok Reddy M

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

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

Есть еще один способ сделать это. В случае, если вам нужно установить только один параметр, например, "высота":

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

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