В TableLayout встречается только один TextView

#android #android-layout #textview #android-tablelayout

#Android #android-layout #textview #android-tablelayout

Вопрос:

Мне нужен один слева и справа. Все настройки должны выполняться с помощью кода. Скриншот:

введите описание изображения здесь

Код:

     super.onCreate(savedInstanceState);
    setContentView(R.layout.overview);
    loadData();
    TableLayout tl = (TableLayout)findViewById(R.id.tl);
    TableRow tr = new TableRow(this);
    TableRow tr2 = new TableRow(this);
    tr.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    //tr2.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    //tr2.setLayoutParams(new ViewGroup.LayoutParams(L., LayoutParams.WRAP_CONTENT));
    TextView tv = new TextView(this);
    TextView tv2 = new TextView(this);
    //tv.se
    tv.setGravity(Gravity.LEFT);
    tv2.setGravity(Gravity.RIGHT);
    tv.setText("Test");
    tv2.setText("Test");
    //tv.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f));
    //tv.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
    tv2.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f));
    //tv.setTextSize(50);
    //tv2.setTextSize(50);
    tr.addView(tv);
    tr.addView(tv2);
    //tl.addView(tr);
    //setContentView(tl);
    tl.addView(tr, new TableLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    }
  

Макет:

 <TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:id="@ id/tl"
  android:stretchColumns="*">
</TableLayout>
  

Комментарии:

1. Почему вы не используете XML-макет для всех TextView элементов и только для TableLayout ?

2. Вам нужно использовать макет таблицы? Похоже, что относительный макет лучше соответствует вашим потребностям.

3. @user5779 Я думаю, что tv2 отключает телевизор, попробуйте изменить текст любого телевизора, чтобы увидеть это…..

4. появляется только первое текстовое представление

Ответ №1:

Параметры LAYOUT используются представлениями, чтобы сообщить своим родителям, как они хотят быть выложены. В Android определено около 13 различных типов LayoutParams. например. LinearLayout.Layoutparams, ViewGroup.LayoutParams, панель действий.LayoutParams и т.д.

Итак, если вы добавляете TextView в LinearLayout, это означает, что LinearLayout является родительским для TextView, поэтому при определении параметров макета для TextView следует использовать LinearLayout.LayoutParams, а не ViewGroup .LayoutParams

в вашем случае вы добавляете два textview в строку таблицы, поэтому, очевидно, вам следует использовать TableRow.LayoutParams

поэтому замените эту строку

 tv2.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f)); 
  

с

 tv2.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f)); 
  

Напишите аналогично для tv
Это был мой первый пост на этом сайте. Надеюсь, это будет полезно 🙂

Ответ №2:

Я думаю, вам нужно использовать:

   android:stretchColumns="0,1"
  

Отличный пример можно найти здесь

сделайте это:

удалите 1f из tv2 layoutparams.

tl.addView(tr, новый TableLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams .WRAP_CONTENT));

это может решить вашу проблему в соответствии с указанной ссылкой.