Cum pot regla TableRow celule lățimi într-un TableLayout programmaticallly?

0

Problema

Problemă: atunci Când selectați un fișier cu un drum lung sau numele, forțele de coloane adiacente să dispară.

Xml layout-ul doar pozitiile TableLayout ca un substituent în Activity și codul Java este folosit pentru a crea `TableRows și opinii după cum este necesar.

Ceea ce încerc să fac: O utilizatorul poate faceți clic pe un "Add" buton pentru a selecta un fișier de pe telefonul lor pentru a fi adăugat ca o cale și un nume de fișier de la un TableRow într-un TableLayout. Prima coloană are un buton ( - ) pentru a scoateți opțional nou adăugat TableRow, iar a doua coloană conține calea și numele de fișier.

Ce am încercat: simt că am încercat totul programatic reglarea diverselor LayoutParams și nici Button sau TextView lățimea și înălțimea parametru pentru a seta o lățime fixă... cel puțin pentru butonul. Dar nimic nu pare să funcționeze. Atunci când căutați aici pentru un exemplu de programare, este întotdeauna aspectul cod XML, nu Java.

Eu sunt încă de învățare Android, dar m-am blocat la asta și am crezut că cineva poate fi capabil să-mi punct în direcția cea bună. Mai jos sunt câteva imagini și codul care creează TableRows și de opinii în cadrul. Simt un fel de prostie nu-mi pot da seama.

Înainte de a adăuga

before adding

După adăugarea

after adding

Codul metode într-o clasa singleton care creează Button și TextView vedere la TableRow și TableLayout. Prima metodă apeluri la alte două care creează Butonul 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

Cel mai bun răspuns

0

După ce am învățat să folosesc termenul de "dinamică" în loc de "programatic", am fost capabil de a găsi ajutor, și, ca rezultat, s-a rezolvat problema mea. Următoarele link-ul furnizat baza pentru mine pentru a deduce o soluție la problema mea. Mai jos, link-ul este soluția mea în răspunsul la această întrebare.

Inspirat sursa: http://mangoprojects.info/android-2/creating-a-tablelayout-dynamically-in-android/

Soluție: nu am reușit să aplice LayoutParams în declarația de TableRow. După ce am adăugat acestor parametri, am putea folosi TableRow.LayoutParams pentru a ajuta la definirea și controlul individual Button și TextViews folosind .weight și .height parametrii în cazul meu particular. A se vedea codul actualizat și pic de rezultate.

Rezultatul vizual de Actualizare Cod

Result

Actualizări de cod pentru setupFilesTableRow

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

Actualizări de cod pentru setupDeleteRowButton (adăugând o greutate și înălțime a ajutat)

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

Actualizări de cod pentru 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

În alte limbi

Această pagină este în alte limbi

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