Come faccio a regolare TableRow cella larghezze all'interno di un TableLayout programmaticallly?

0

Domanda

Problema: Quando seleziono un file con un lungo percorso o nome, le forze di colonne adiacenti a scomparire.

Il layout xml con le posizioni TableLayout come segnaposto nell' Activity e il codice Java è utilizzato per creare il `TableRows e viste come necessarie.

Quello che sto cercando di fare: Un utente può fare clic su un pulsante "Aggiungi" per selezionare un file sul proprio telefono per essere aggiunto come un percorso e un nome file per un TableRow all'interno di un TableLayout. La prima colonna ha un pulsante ( - ) se si desidera rimuovere appena aggiunto TableRow, e la seconda colonna contiene il percorso e il nome del file.

Quello che ho provato: ho la sensazione che ho provato di tutto a livello di programmazione, regolazione di varie LayoutParams e Button o TextView la larghezza e l'altezza parametro per impostare una larghezza fissa... almeno per il pulsante. Ma nulla sembra funzionare. Quando faccio una ricerca qui per un esempio di programmazione, è sempre il layout XML codice, non il Java.

Io sono ancora il tipo di apprendimento Android ma mi sono bloccato su questo e ho pensato che qualcuno potrebbe essere in grado di mi punto nella giusta direzione. Qui di seguito sono alcune immagini e il codice che crea la TableRows e viste all'interno. Sento un po ' stupido io non riesco a capire questo fuori.

Prima di aggiungere

before adding

Dopo l'aggiunta di

after adding

Codice di metodi all'interno di una classe singleton che creare il Button e TextView vista la TableRow e TableLayout. Il primo metodo chiamate agli altri due che creare il Pulsante ad una 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

Migliore risposta

0

Dopo che ho imparato a usare il termine "dinamico" invece di "programmatico", sono stato in grado di trovare un qualche aiuto, e come risultato, risolto il mio problema. Al seguente link fornito la base per me dedurre una soluzione al mio problema. Di seguito il link è la mia soluzione in risposta a questa domanda.

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

Soluzione: non sono riuscito ad applicare LayoutParams la dichiarazione di TableRow. Una volta ho aggiunto questi parametri, potrei usare TableRow.LayoutParams per aiutare a definire e controllare i singoli Button e TextViews utilizzando .weight e .height parametri nel mio caso in particolare. Vedere il codice aggiornato e foto dei risultati.

Un Risultato visivo di Aggiornamento del Codice di

Result

Aggiornamenti del codice di setupFilesTableRow

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

Aggiornamenti del codice di setupDeleteRowButton (l'aggiunta di un peso e altezza ha aiutato)

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

Aggiornamenti del codice di 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

In altre lingue

Questa pagina è in altre lingue

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