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

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

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

Вы должны использовать 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); 

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

Создать переменную 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, представления будут перемещаться в соответствии с пространством. Для заданного расстояния между представлениями в линейном макете используйте значение weight для «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); 
 TextView txtview = new TextView(v.getContext()); LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f); txtview.setLayoutParams(params); 

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

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

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

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

 LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParamsMATCH_PARENT); param.weight=1.0f; 

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

 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; } 
Intereting Posts
«Пространство имен не связано» в файле ресурсов xml при проверке кода в Android Studio Является ли IntentService реализацией Command Pattern? Панель состояния перекрывает строку состояния Динамический вывод текста строки на экране Android Не удалось создать проект Android F # – Visual Studio 2015 Xamarin Community Загрузка фотографий в Facebook: добавление параметров перед выполнением вызова newUploadPhotoRequest приводит к ошибке «OAuthException» Смещение прокрутки GridView ProgressDialog не появляется Лямбда-выражения не поддерживаются -source 1.7 (Android Studio) Местоположение Android-sdk не было настроено в настройках в mac os? Одновременно используйте один фрагмент в ViewPager Быстрый алгоритм для инвертирования значения цвета ARGB в ABGR? Это ядро ​​требует процессора x86-64, но только обнаружило i686 cpu Как я могу автоматически очищать вывод logcat перед каждым запуском в Android Studio? Как программно скрыть идентификатор вызывающего абонента на Android