Проблема: Когда я выбираю файл с длинным путем или именем, это приводит к исчезновению соседних столбцов.
XML-файл макета просто позиционирует TableLayout
в качестве заполнителя в Activity
и код Java используется для создания таблиц и представлений по мере необходимости.
Что я пытаюсь сделать: пользователь может нажать кнопку "Добавить", чтобы выбрать файл на своем телефоне, который будет добавлен в качестве пути и имени файла в TableRow
в пределах TableLayout
. В первом столбце есть кнопка ( - ) для дополнительного удаления только что добавленной таблицы, а второй столбец содержит путь и имя файла.
Что я пробовал: Я чувствую, что перепробовал все, программно настраивая различные LayoutParams
и либо Button
или TextView
параметр ширина и высота, чтобы установить фиксированную ширину... по крайней мере, для кнопки. Но, похоже, ничего не помогает. Когда я ищу здесь пример программирования, это всегда XML-код макета, а не Java.
Я все еще изучаю Android, но я застрял на этом и подумал, что кто-то может указать мне правильное направление. Ниже приведены некоторые изображения и код, который создает таблицы и представления внутри. Чувствую себя глупо, я не могу этого понять.
Перед добавлением
После добавления
Методы кода внутри одноэлементного класса, которые создают Button
и TextView
взгляды на TableRow
и TableLayout
. Первый метод вызывает два других метода, которые создают представление текста объявления кнопки
public static TableRow setupFilesTableRow(Context context, TableLayout table, String fileID, String fileName, boolean header) {
TableRow row = new TableRow(context);
if(header) {
row.addView(setupFilesAddRowButton(context, table));
row.addView(addRowTextViewToTable(context, fileName, true));
}else{
row.addView(setupDeleteRowButton(context, table));
for(int r=1; r < 2; r++){
row.addView(addRowTextViewToTable(context, fileName, false));
row.setClickable(true);
}
}
return row;
}
public static Button setupDeleteRowButton(Context context, TableLayout table){
Button btnDelete = new Button(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.MATCH_PARENT);
trLayoutParams.setMargins(3,3,3,3);
btnDelete.setBackgroundColor(Color.WHITE);
btnDelete.setLayoutParams(trLayoutParams);
btnDelete.setText("-");
btnDelete.setTypeface(Typeface.DEFAULT,Typeface.BOLD);
btnDelete.setGravity(Gravity.CENTER);
btnDelete.setPadding(5,5,5,5);
btnDelete.setOnClickListener(v -> {
deleteTableRows(table);
});
return btnDelete;
}
public static TextView addRowTextViewToTable(Context context, String value, boolean bold){
TextView tv;
tv = new TextView(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams();
trLayoutParams.setMargins(3,3,3,3);
tv.setText(String.valueOf(value));
if(bold) tv.setTypeface(null, Typeface.BOLD);
tv.setLayoutParams(trLayoutParams);
tv.setTextSize(12);
tv.setGravity(Gravity.CENTER);
tv.setPadding(8,8,8,8);
tv.setBackgroundColor(Color.WHITE);
return tv;
}