Comment puis-je régler TableRow la largeur des cellules à l'intérieur d'un TableLayout programmaticallly?

0

La question

Problème: Lorsque je sélectionne un fichier avec un long chemin d'accès ou le nom, il force les colonnes adjacentes à disparaître.

La mise en page xml tout les postes de la TableLayout comme un espace réservé dans la Activity et le code Java est utilisé pour créer le `TableRows et les vues comme nécessaires.

Ce que j'essaie de faire: Un utilisateur peut cliquer sur un bouton "Ajouter" pour sélectionner un fichier sur leur téléphone pour être ajouté comme un chemin d'accès et nom de fichier à un TableRow au sein d'une TableLayout. La première colonne comporte un bouton ( - ) pour éventuellement supprimer le nouvellement ajouté TableRow, et la deuxième colonne contient le chemin d'accès et nom de fichier.

Ce que j'ai essayé: j'ai l'impression que j'ai tout essayé par programmation réglage de divers LayoutParams et soit Button ou TextView la largeur et la hauteur de paramètre pour définir une largeur fixe... au moins pour le bouton. Mais rien ne semble fonctionner. Quand je fais une recherche ici pour un exemple de programmation, c'est toujours la mise en page de code XML, pas le Java.

Je suis toujours en sorte de l'apprentissage de la Android, mais je suis bloqué sur ce et de la pensée de quelqu'un peut être en mesure de me pointer dans la bonne direction. Ci-dessous, quelques images et le code qui crée la TableRows et des vues à l'intérieur. Sens un peu stupide, je ne peux pas comprendre cela.

Avant d'ajouter

before adding

Après l'ajout d'

after adding

Code des méthodes dans une classe singleton qui créent l' Button et TextView vues de l' TableRow et TableLayout. Les premiers appels de méthode pour les deux autres ce qui crée le Bouton 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

La meilleure réponse

0

Après j'ai appris à utiliser le terme "dynamique" au lieu de "programmatique", j'ai été capable de trouver un peu d'aide, et comme un résultat, résolu mon problème. Le lien suivant à condition de base pour moi d'en déduire une solution à mon problème. Ci-dessous le lien c'est ma solution en réponse à cette question.

Inspiré source: http://mangoprojects.info/android-2/creating-a-tablelayout-dynamically-in-android/

Solution: je n'ai pas réussi à appliquer LayoutParams a la déclaration de la TableRow. Une fois, j'ai ajouté ces paramètres, j'ai pu utiliser TableRow.LayoutParams pour aider à définir et à contrôler l'individu Button et TextViews à l'aide de .weight et .height paramètres dans mon cas particulier. Voir le code mis à jour et le pic des résultats.

Résultat visuel de la mise à Jour du Code

Result

Mises à jour du Code de setupFilesTableRow

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

Mises à jour du Code de setupDeleteRowButton (l'ajout d'un poids et de la hauteur aidé)

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

Mises à jour du Code de 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

Dans d'autres langues

Cette page est dans d'autres langues

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