2016-05-31 1 views
0

J'ai dynamiquement créé une table remplie de clés et de valeurs de longueur variable.Redimensionner dynamiquement la largeur TextView dans TableLayout

Lorsque j'essaie de définir la largeur pour envelopper le contenu, la largeur est définie par rapport aux tailles de clé individuelles plutôt qu'à la table dans son ensemble. Le résultat est que le deuxième TextView est trop large une fois qu'une clé avec une plus grande largeur est ajoutée à la table.

J'ai essayé de redessiner la table après qu'elle soit terminée, mais les largeurs TextView d'origine sont conservées.

Existe-t-il une correction simple que j'ai ignorée ou dois-je programmer pour obtenir la largeur de clé la plus longue, puis définir manuellement une largeur maximale pour le second TextView?

layout.xml

<ScrollView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_weight="1" 
    android:scrollbars="none"> 

    <TableLayout 
     android:id="@+id/passData" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="15dip"> 
    </TableLayout> 
</ScrollView> 

activity.java

private TableRow generateRow(String key, String value, boolean isOdd) { 

    TableRow tr = new TableRow(this); 
    tr.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, 
TableRow.LayoutParams.WRAP_CONTENT)); 

    if (isOdd) { 
     tr.setBackgroundColor(getResources().getColor(R.color.colorTableRow)); 
    } 

    TextView keyView = new TextView(this); 
    TextView valueView = new TextView(this); 

    keyView.setTypeface(null, Typeface.BOLD); 
    keyView.setPadding(30, 20, 30, 20); 
    keyView.setTextSize(15); 
    keyView.setText(firstCaps(key)); 

    valueView.setText(value.replace(" ", "\u00A0")); 
    valueView.setSingleLine(false); 
    valueView.setMaxLines(20); 
    valueView.setPadding(0, 20, 30, 20); 
    valueView.setGravity(Gravity.CLIP_HORIZONTAL); 

    tr.addView(keyView); 
    tr.addView(valueView,new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,  
TableRow.LayoutParams.WRAP_CONTENT)); 

    return tr; 
} 

Résultat

enter image description here

Répondre

-1

Vous pouvez utiliser cette vue auto_resize_text pour votre problème.

Auto Scale TextView Text to Fit within Bounds

https://github.com/grantland/android-autofittextview

+0

Je ne sais pas cela fonctionnera comme la largeur de la TextView a déjà été défini. Je vais essayer demain et je vous le ferai savoir. – PassKit

+0

Comme suspecté - la taille de TextView a déjà été déterminée par rapport à la largeur de l'autre TextView dans la ligne. Cette classe n'a donc eu aucun effet. – PassKit

0

La solution était tout simplement d'ajouter un poids aux LayoutParams et définir la largeur à zéro pour permettre correctement la taille.

activity.java

private TableRow generateRow(String key, String value, boolean isOdd) { 
    TableRow tr = new TableRow(this); 
    tr.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, 
TableRow.LayoutParams.WRAP_CONTENT)); 
    if (isOdd) { 
     tr.setBackgroundColor(getResources().getColor(R.color.colorTableRow)); 
    } 
    TextView keyView = new TextView(this); 
    TextView valueView = new TextView(this); 

    keyView.setTypeface(null, Typeface.BOLD); 
    keyView.setPadding(30, 20, 30, 20); 
    keyView.setTextSize(15); 
    keyView.setText(firstCaps(key)); 
    valueView.setText(value); 
    valueView.setSingleLine(false); 
    valueView.setMaxLines(20); 
    valueView.setPadding(0, 20, 30, 20); 
    tr.addView(keyView); 

    // Set width to zero and weight to 1 
    tr.addView(valueView,new TableRow.LayoutParams(0, 
     TableRow.LayoutParams.WRAP_CONTENT, 1f)); 

    return tr; 
} 

Résultat

Screenshot