Jak programowo ustawić szerokość komórek TableRow w tabeli?

0

Pytanie

Problem: Gdy wybieram plik z długim ścieżka lub nazwa, to prowadzi do zaniku sąsiednich kolumn.

Plik XML układu prostu pozycjonuje TableLayout jako kruszywa w Activity i kod Java służy do tworzenia tabel i widoków w razie potrzeby.

Co staram się zrobić: użytkownik może kliknąć przycisk "Dodaj", aby wybrać plik na telefonie, który będzie dodany jako ścieżkę i nazwę pliku w TableRow w ramach TableLayout. W pierwszej kolumnie znajduje się przycisk ( - ) dla dodatkowego usunąć tylko że dodanej tabeli, a druga kolumna zawiera ścieżkę i nazwę pliku.

Co próbowałem: czuję, że wszystkiego, programowo dostosowując różne LayoutParams i albo Button lub TextView parametr szerokość i wysokość, aby ustawić stałą szerokość... przynajmniej dla przycisku. Ale wygląda na to, nic nie pomaga. Gdy szukam tutaj przykład programowania, to zawsze kod XML układu, a nie Java.

Ja jeszcze studiuję Android, ale utknąłem na tym i pomyślałem, że ktoś może wskazać mi właściwy kierunek. Poniżej znajdują się niektóre obrazki i kod, który tworzy tabele i widoki wewnątrz. Czuję się głupio, że nie mogę tego zrozumieć.

Przed dodaniem

before adding

Po dodaniu

after adding

Metody kodu wewnątrz одноэлементного klasy, które tworzą Button i TextView poglądy na TableRow i TableLayout. Pierwsza metoda powoduje dwie inne metody, które tworzą pojęcie tekstu reklamy przycisku

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

Najlepsza odpowiedź

0

Po tym, jak nauczyłem się używać terminu "dynamiczny" zamiast "oprogramowanie", udało mi się znaleźć jakąś pomoc i w rezultacie postanowiłem swój problem. Link dla mnie podstawą do wyjścia o rozwiązaniu mojego problemu. Poniżej link przedstawia moje rozwiązanie w odpowiedzi na to pytanie.

Inspirujące źródło: http://mangoprojects.info/android-2/creating-a-tablelayout-dynamically-in-android/

Rozwiązanie: nie Jestem w stanie ubiegać się LayoutParams w ogłoszeniu o TableRow. Jak tylko dodałem te ustawienia, mógłbym użyć TableRow.LayoutParams aby pomóc określić i kontrolować osobowość Button i TextViews z pomocą .weight i .height ustawienia w moim konkretnym przypadku. Zobacz zaktualizowany kod i obraz wyników.

Efekt wizualny aktualizacji kodu

Result

Aktualizacje kodu setupFilesTableRow

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

Aktualizacje kodu setupDeleteRowButton (dodawanie wagi i wzrostu pomogło)

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

Aktualizacje kodu 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

W innych językach

Ta strona jest w innych językach

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