¿Cómo puedo ajustar TableRow ancho de celda dentro de un TableLayout programmaticallly?

0

Pregunta

Problema: Cuando se selecciona un archivo con una larga ruta de acceso o nombre, las fuerzas de columnas adyacentes a desaparecer.

El diseño de xml sólo las posiciones de la TableLayout como un marcador de posición en el Activity y el código Java se utiliza para crear el `Filastabla y puntos de vista como sea necesario.

Lo que estoy tratando de hacer: Un usuario puede hacer clic en un botón "Agregar" para seleccionar un archivo de su teléfono para ser añadido como una ruta de acceso y nombre de archivo para un TableRow dentro de un TableLayout. La primera columna tiene un botón ( - ) para quitar opcionalmente la recién agregado TableRow, y la segunda columna contiene la ruta de acceso y nombre de archivo.

Lo que he intentado: creo que he intentado todo mediante programación ajuste de los diversos LayoutParams y ya sea Button o TextView la anchura y la altura de parámetro para establecer un ancho fijo... al menos para el botón. Pero nada parece funcionar. Cuando busco aquí para ver un ejemplo de programación, es siempre el layout XML de código, no el de Java.

Estoy siendo una especie de aprendizaje de los Android, pero estoy atascado en esto y pensé que alguien puede ser capaz de que me apunte en la dirección correcta. A continuación están algunas de las imágenes y el código que crea el Filastabla y puntos de vista dentro. Siento un poco estúpido que no puede entender esto.

Antes de agregar

before adding

Después de la adición de

after adding

El código de los métodos dentro de una clase singleton que crear la Button y TextView vistas a la TableRow y TableLayout. El primer método llama a los otros dos que crear el Botón ad 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

Mejor respuesta

0

Después aprendí a usar el término "dinámica" en lugar de "programático", que fue capaz de encontrar algo de ayuda, y como resultado, ha resuelto mi problema. El siguiente enlace proporciona la base para mí para inferir una solución a mi problema. A continuación el enlace es mi solución en respuesta a esta pregunta.

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

Solución: yo no se aplican LayoutParams en la declaración de la TableRow. Una vez que he añadido estos parámetros, se podría utilizar TableRow.LayoutParams para ayudar a definir y controlar al individuo Button y TextViews el uso de .weight y .height parámetros en mi caso en particular. Ver el código actualizado y foto de los resultados.

Resultado Visual de la Actualización del Código de

Result

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

Las Actualizaciones de código para setupDeleteRowButton (la adición de un peso y la altura de la ayudó a)

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

Las Actualizaciones 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

En otros idiomas

Esta página está en otros idiomas

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