Como faço para ajustar TableRow largura de célula dentro de um TableLayout programmaticallly?

0

Pergunta

Problema: Quando eu selecionar um arquivo com um longo caminho ou nome, forças colunas adjacentes a desaparecer.

O esquema xml apenas posiciona o TableLayout como um marcador de posição de Activity e o código Java é utilizada para criar a `TableRows e vistas como necessárias.

O que eu estou tentando fazer: Um usuário pode clicar em um botão "Adicionar" para selecionar um arquivo no seu telefone para ser adicionado como um caminho e nome de arquivo para um TableRow dentro de um TableLayout. A primeira coluna tem um botão ( - ) para remover, opcionalmente, o recém-adicionado TableRow, e a segunda coluna contém o caminho e nome do arquivo.

O que eu tentei: eu sinto que eu já tentei de tudo programaticamente ajustar várias LayoutParams e Button ou TextView largura e altura parâmetro para definir uma largura fixa... pelo menos para o botão. Mas nada parece funcionar. Quando eu procurar aqui para um exemplo de programação, é sempre o layout de código XML, e não Java.

Eu ainda estou tipo de aprendizagem que o Android, mas eu estou preso a este e pensei que alguém pode ser capaz de me apontar na direção certa. Abaixo estão algumas imagens e o código que cria o TableRows e pontos de vista de dentro. Sinto estúpido que eu não posso entender isso.

Antes de adicionar

before adding

Depois de adicionar

after adding

Código de métodos dentro de uma classe singleton que criar a Button e TextView vistas para o TableRow e TableLayout. O primeiro método de chamadas para os outros dois, que cria o Botão de anúncio TextView

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

Melhor resposta

0

Depois que eu aprendi a usar o termo "dinâmico" em vez de "programáticas", eu era capaz de encontrar alguma ajuda, e como resultado, resolveu meu problema. O seguinte link fornecido a base para me sugerir uma solução para o meu problema. Abaixo o link é a minha solução em resposta a esta pergunta.

Inspirado fonte: http://mangoprojects.info/android-2/creating-a-tablelayout-dynamically-in-android/

Solução: eu não aplicar LayoutParams na declaração da TableRow. Uma vez eu adicionei esses parâmetros, eu poderia usar TableRow.LayoutParams para ajudar a definir e controlar o indivíduo Button e TextViews usando .weight e .height parâmetros no meu caso em particular. Veja o código atualizado e pic dos resultados.

Resultado Visual de Atualização do Código de

Result

Atualizações de código para setupFilesTableRow

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

Atualizações de código para setupDeleteRowButton (a adição de um peso e a altura ajudado)

    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);

Atualizações de código para 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

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................