Jak mám nastavit TableRow mobilní šířkách v TableLayout programmaticallly?

0

Otázka

Problém: Když jsem se vybrat soubor s dlouhou cestu nebo název, síly sousedních sloupcích zmizí.

Rozvržení xml jen pozice TableLayout jako zástupný symbol v Activity a kód v jazyce Java se používá k vytvoření `TableRows a názory podle potřeby.

To, co se snažím dělat: uživatel může klikněte na tlačítko "Přidat" a vyberte soubor na svém telefonu, které mají být přidány jako cestu a název souboru do TableRow v TableLayout. První sloupec obsahuje tlačítko ( - ) volitelně odstranit nově přidané TableRow, a druhý sloupec obsahuje cestu a název souboru.

Co jsem zkoušel: mám pocit, že jsem se snažil všechno, co programově nastavení různých LayoutParams a to buď Button nebo TextView šířka a výška parametr nastavit pevnou šířku... alespoň pro tlačítko. Ale nic, zdá se do práce. Když jsem se hledat zde pro příklad programování, je vždy rozvržení XML kód, není Java.

Ještě jsem se učit Android, ale zasekl jsem se na to a myslel, že někdo může být schopen místo mě správným směrem. Níže jsou uvedeny některé obrázky a kód, který vytvoří TableRows a výhled do. Připadám docela hloupě nemůžu na to přijít.

Před přidáním

before adding

Po přidání

after adding

Kód metod v rámci singleton třídy, které vytvářejí Button a TextView výhled na TableRow a TableLayout. První volání metody další dva, které vytvářejí Tlačítko 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

Nejlepší odpověď

0

Poté, co jsem se naučil používat termín "dynamické" místo "programový", jsem byl schopen najít nějakou pomoc, a jako výsledek, vyřešit můj problém. Následující odkaz poskytl základ pro mě odvodit řešení pro můj problém. Níže odkaz je moje řešení v odpovědi na tuto otázku.

Inspiroval zdroj: http://mangoprojects.info/android-2/creating-a-tablelayout-dynamically-in-android/

Řešení: selhal jsem použít LayoutParams v prohlášení TableRow. Jakmile jsem přidal tyto parametry, hodila by se TableRow.LayoutParams pomoci definovat a ovládat jednotlivé Button a TextViews pomocí .weight a .height parametry v mém konkrétním případě. Podívejte se na aktualizovaný kód a pic výsledků.

Vizuální Výsledek Kód Aktualizace

Result

Kód Aktualizace setupFilesTableRow

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

Kód Aktualizace setupDeleteRowButton (přidání hmotnosti a výšky pomohl)

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

Kód Aktualizace 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

V jiných jazycích

Tato stránka je v jiných jazycích

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