2016-05-31 13 views
0

Ich habe dynamisch eine Tabelle erstellt, die mit Schlüsseln und Werten unterschiedlicher Länge gefüllt wird.Größe von TextView in TableLayout dynamisch ändern

Wenn ich versuche, die Breite zum Umbrechen von Inhalt festzulegen, wird die Breite relativ zu den einzelnen Schlüsselgrößen und nicht zur Tabelle als Ganzes festgelegt.

Dies führt dazu, dass der zweite TextView zu breit wird, sobald ein Schlüssel mit einer größeren Breite zur Tabelle hinzugefügt wird.

Ich habe versucht, die Tabelle neu zu zeichnen, nachdem es abgeschlossen ist, aber die ursprünglichen TextView-Breiten bleiben erhalten.

Gibt es eine einfache Lösung, die ich übersehen habe, oder muss ich programmatisch die längste Schlüsselbreite erhalten, dann manuell eine maximale Breite für die zweite TextView festlegen?

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

Ergebnis

enter image description here

Antwort

-1

Sie können diese Ansicht auto_resize_text für Ihr Problem verwenden.

Auto Scale TextView Text to Fit within Bounds

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

+0

nicht sicher, dies ist wie die Breite funktionieren wird für die Textview bereits eingestellt wurde. Wir werden es morgen versuchen und dich wissen lassen. – PassKit

+0

Wie vermutet - die Größe der TextView wurde bereits relativ zur Breite der anderen TextView in der Zeile bestimmt. Diese Klasse hatte daher keine Wirkung. – PassKit

0

Die Lösung war einfach ein Gewicht auf die LayoutParams aufzuwerten und die Breite auf Null gesetzt um es richtig zu Größe zu ermöglichen.

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

Ergebnis

Screenshot