#java #android
#java #Android
Вопрос:
Я добавляю строки в a TableLayout
программно, перебирая an ArrayList
. В настоящее время столбцы таблицы установлены WRAP_CONTENT
равными и из-за этого не растягиваются, чтобы занимать всю ширину устройства.
Пройдя несколько потоков SO, я нашел этот фрагмент кода:
LayoutParams lparams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
При использовании Alt Enterпоявляется длинный список классов, и я не уверен, какой класс импортировать.
Файл активности
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/activity_feed_history"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="abc.def.FeedHistory">
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="14dp"
android:id="@ id/todayTable">
</TableLayout>
</RelativeLayout>
Java-файл
.
.
TableLayout table = (TableLayout) findViewById(R.id.todayTable);
TableRow row = new TableRow(this);
row.setLayoutParams(lparams);
TextView textView= new TextView(this);
textView.setText("Row Text);
textView.setLayoutParams(lparams);
row.addView(textView);
table.addView(row);
К вашему сведению
Я уже пробовал TableLayout.LayoutParams
, ViewGroup.LayoutParams
, и RelativeLayout.LayoutParms
. Все это приводит к тому, что таблица исчезает при просмотре в эмуляторе.
Комментарии:
1. всегда один из внешнего контейнера
2. Итак, в данном случае
RelativeLayout
, поскольку это корневой элемент? Но я уже пробовал с этим и получил пустой экран.3.
TableLayout
Нужны представленияTableLayout.LayoutParams
. Другими словами, первый выбор прямо вверху — Android Studio / IntelliJ очень умен, когда дело доходит до выяснения throw-материала для вас.4. если вы хотите вызвать
setLayoutParams
TableLayout
, чем это правильно
Ответ №1:
Безопаснее LayoutParams
всего импортировать в другие макеты ViewGroup.LayoutParams
. Причина в том, что все представления будут размещены внутри ViewGroup
, потому что все макеты ViewGroups
.
Иногда, однако, вам нужно немного больше деталей. В этом случае вам нужно использовать LayoutParam
класс прямого родителя. В противном случае вы получите ClassCastException
.
В случае a TableLayout
вы бы создали свой TableRow
, а затем передали TableLayout.LayoutParams
его следующим образом:
TableLayout layout = methodToGetLayout();
TableLayout.LayoutParams lp = new TableLayout.LayoutParmas(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.gravity = Gravity.CENTER;
lp.layout_weight = 1;
TableRow row = new TableRow(context);
row.setLayoutParams(lp);
Таким образом, в этом случае вы можете вручную задать параметры LAYOUT, специфичные для a TableLayout.LayoutParams
, которые не существуют в общем ViewGroup.LayoutParams
. Если вам это не нужно, то вы можете придерживаться универсального ViewGroup.LayoutParams
и все будет в порядке.
Ответ №2:
Попробуйте это:
final TableRow row = new TableRow(context);
TextView textView = new TextView(context);
textView.setText("0");
textView.setLayoutParams(new TableRow.LayoutParams(0, TableLayout.LayoutParams.MATCH_PARENT, 1));
row.addView(textView, 0);
Комментарии:
1. Похоже, это работает. Не могли бы вы объяснить, что там происходит?