TableLayout içindeki TableRow hücre genişliklerini programlı olarak nasıl ayarlayabilirim?

0

Soru

Sorun: Uzun bir yol veya ada sahip bir dosya seçtiğimde, bitişik sütunları kaybolmaya zorlar.

Düzen xml sadece konumlandırır TableLayout bir yer tutucu olarak Activity ve Java kodu `TableRows ve görünümleri gerektiği gibi oluşturmak için kullanılır.

Ne yapmaya çalışıyorum: Bir kullanıcı, telefonunda bir dosyaya yol ve dosya adı olarak eklenecek bir dosya seçmek için bir "Ekle" düğmesini tıklayabilir. TableRow bir içinde TableLayout. İlk sütunda yeni eklenen Tablerow'u isteğe bağlı olarak kaldırmak için bir düğme ( - ) bulunur ve ikinci sütunda yol ve dosya adı bulunur.

Ne denedim: Her şeyi programlı olarak ayarlamayı denediğimi hissediyorum LayoutParams ve ya Button veya TextView sabit bir genişlik ayarlamak için genişlik ve yükseklik parametresi... en azından düğme için. Ama hiçbir şey işe yaramıyor gibi görünüyor. Burada bir programlama örneği aradığımda, her zaman Java değil, düzen XML kodudur.

Hala Android'i öğreniyorum ama bu konuda sıkışıp kaldım ve birisinin beni doğru yöne yönlendirebileceğini düşündüm. Aşağıda bazı resimler ve içindeki tabloları ve görünümleri oluşturan kod bulunmaktadır. Ben bunu anlayabilirsem aptal hissediyorum tür.

Eklemeden önce

before adding

Ekledikten sonra

after adding

Bir singleton sınıfı içindeki kod yöntemleri Button ve TextView için görünümler TableRow ve TableLayout. İlk yöntem, ad TextView Düğmesini oluşturan diğer ikisini çağırır

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

En iyi cevabı

0

"Programatik" yerine "dinamik" terimini kullanmayı öğrendikten sonra biraz yardım bulabildim ve sonuç olarak sorunumu çözdüm. Aşağıdaki bağlantı, sorunuma bir çözüm bulmam için temel oluşturdu. Bağlantının altında bu sorunun cevabındaki çözümüm var.

İlham kaynağı: http://mangoprojects.info/android-2/creating-a-tablelayout-dynamically-in-android/

Çözüm: Başvuruda başarısız oldum LayoutParams deklarasyonunda TableRow. Bu parametreleri ekledikten sonra şunları kullanabilirim TableRow.LayoutParams bireyi tanımlamaya ve kontrol etmeye yardımcı olmak Button ve TextViews kullanım .weight ve .height benim özel durumumdaki parametreler. Sonuçların güncellenmiş koduna ve resmine bakın.

Kod Güncellemesinin Görsel Sonucu

Result

Kod Güncellemeleri setupFilesTableRow

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

Kod Güncellemeleri setupDeleteRowButton (ağırlık ve boy eklemek yardımcı oldu)

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

Kod Güncellemeleri 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

Diğer dillerde

Bu sayfa diğer dillerde

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