Как программно настроить ширину ячеек TableRow в таблице?

0

Вопрос

Проблема: Когда я выбираю файл с длинным путем или именем, это приводит к исчезновению соседних столбцов.

XML-файл макета просто позиционирует TableLayout в качестве заполнителя в Activity и код Java используется для создания таблиц и представлений по мере необходимости.

Что я пытаюсь сделать: пользователь может нажать кнопку "Добавить", чтобы выбрать файл на своем телефоне, который будет добавлен в качестве пути и имени файла в TableRow в пределах TableLayout. В первом столбце есть кнопка ( - ) для дополнительного удаления только что добавленной таблицы, а второй столбец содержит путь и имя файла.

Что я пробовал: Я чувствую, что перепробовал все, программно настраивая различные LayoutParams и либо Button или TextView параметр ширина и высота, чтобы установить фиксированную ширину... по крайней мере, для кнопки. Но, похоже, ничего не помогает. Когда я ищу здесь пример программирования, это всегда XML-код макета, а не Java.

Я все еще изучаю Android, но я застрял на этом и подумал, что кто-то может указать мне правильное направление. Ниже приведены некоторые изображения и код, который создает таблицы и представления внутри. Чувствую себя глупо, я не могу этого понять.

Перед добавлением

before adding

После добавления

after adding

Методы кода внутри одноэлементного класса, которые создают 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;
    }
android android-tablelayout tablerow
2021-11-17 20:22:02
1

Лучший ответ

0

После того, как я научился использовать термин "динамический" вместо "программный", я смог найти некоторую помощь и в результате решил свою проблему. Следующая ссылка послужила мне основой для вывода о решении моей проблемы. Ниже по ссылке приведено мое решение в ответ на этот вопрос.

Вдохновенный источник: http://mangoprojects.info/android-2/creating-a-tablelayout-dynamically-in-android/

Решение: Я не смог подать заявку LayoutParams при объявлении о TableRow. Как только я добавил эти параметры, я мог бы использовать TableRow.LayoutParams чтобы помочь определить и контролировать личность Button и TextViews с помощью .weight и .height параметры в моем конкретном случае. Смотрите обновленный код и изображение результатов.

Визуальный результат обновления кода

Result

Обновления кода для setupFilesTableRow

    TableRow row = new TableRow(context);
    LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
    row.setLayoutParams(ll);

Обновления кода для setupDeleteRowButton (добавление веса и роста помогло)

    Button btnDelete = new Button(context);
    TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT);
    trLayoutParams.setMargins(3,3,3,3);
    trLayoutParams.weight = 1;
    trLayoutParams.height =75;
    btnDelete.setLayoutParams(trLayoutParams);

Обновления кода для addRowTextViewToTable*

    TextView tv;
    tv = new TextView(context);
    TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(0, TableRow.LayoutParams.MATCH_PARENT);
    trLayoutParams.setMargins(3,3,3,3);
    trLayoutParams.weight = 5;
    tv.setLayoutParams(trLayoutParams);
2021-11-18 20:41:45

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................