Установите маску макета 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;
}