Программная вставка TableRows в TableLayout - TextView внутри TableRow не будет отображаться
-
26-12-2019 - |
Вопрос
Хорошо, итак, я пытаюсь вставить TableRows
в TableLayout
программно при каждом нажатии кнопки.Каждая из этих строк содержит TextView
установите значение в некоторую строку.Моя проблема в том, что, хотя TableRow
успешно вставлен текст в TextView, который сам находится внутри TableRow
не появится.
Вот что я делаю:
//prepare TextView to put inside a TableRow
TextView text = new TextView(MyClass.this);
text.setText(someString);
text.setTextSize(15);
text.setTextColor(Color.parseColor("#FF9900"));
text.setLayoutParams(new LayoutParams
(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
//Prepare TableRow to be inserted
TableRow row = new TableRow(MyClass.this);
row.addView(text);
row.setPadding(4,4,4,4);
row.setGravity(Gravity.CENTER);
row.setLayoutParams(new LayoutParams
(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
//add row to the table
someTableLayout.addView(row);
Результат:Строка вставлена, но я не вижу текста (я знаю, что строка вставлена, так как я вижу разделители между каждой строкой).Я предполагаю, что это как-то связано с LayoutParams
?Вероятно, я упускаю из виду что-то очень глупое...но я понятия не имею...
Скриншот после того, как я нажму Roll
который должен вставить строку со строкой / TextView:
Текстовое представление "Начать с прокрутки" - это первая строка, которую я ввел в XML-файл.Он отображается нормально, но строки, вставленные программно, этого не делают
Решение
Во-первых, это то, что у вас есть TextView
с высотой match_parent
и еще tablerow
с высотой wrap_content
так что сделайте TextView
высота также равна wrap_content .
И, во-вторых, назначьте соответствующие параметры компоновки, например:
TextView text = new TextView(MyClass.this);
text.setText(someString);
text.setTextSize(15);
text.setTextColor(Color.parseColor("#FF9900"));
text.setLayoutParams(new TableRow.LayoutParams
(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
//Prepare TableRow to be inserted
TableRow row = new TableRow(MyClass.this);
row.addView(text);
row.setPadding(4,4,4,4);
row.setGravity(Gravity.CENTER);
row.setLayoutParams(new TableLayout.LayoutParams
(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
//add row to the table
someTableLayout.addView(row);
Другие советы
Попробуйте это сделать:
text.setLayoutParams(new LayoutParams
(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
text.setLayoutParams(new LayoutParams
(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));