Установить вес макета TextView программно
Я пытаюсь динамически создать TableRow
объекты и добавить их в TableLayout
, TableRow
Объект имеет 2 предмета, TextView
и CheckBox
, TextView
вес элементов должен быть равен 1, чтобы CheckBox
предметы в крайнем правом положении.
Я не могу найти документацию о том, как программно установить вес макета TextView
вещь.
11 ответов
Вы должны использовать 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
В более ранних ответах вес передается конструктору нового объекта 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);
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);
1f обозначает вес =1; Вы можете дать 2f или 3f, представления будут перемещаться в соответствии с пространством
Просто установите параметры макета в этом макете, как
создать переменную 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);
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);
Это должно работать для вас
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParams.MATCH_PARENT);
param.weight=1.0f;
Вы также можете дать вес отдельно, как это,
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);
После борьбы в течение 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));
Есть еще один способ сделать это. Если вам нужно установить только один параметр, например, "высота":
TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);
У меня было довольно много трудностей с решением, очень похожим на это: попытка иметь две кнопки в 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;
}