2012-04-09 5 views
0

Ich habe Probleme, meine TableRow mit einigen TextViews in TableLayout dynamisch einzurichten. Ich habe zwei Bilder, eines ist meine aktuelle Situation, und das andere ist mein Modell, die erwartete Situation (das Ziel, das ich erreichen muss). Ich habe keine XML-Layouts; All dies wird programmatisch erstellt, was ich auch erreichen muss.Wie fixiere ich TableLayout und TableRow dynamisch an bestimmten Positionen?

Die gezeigten Schnappschüsse sind für einen High Score-Bildschirm, wo ich eine Liste von Spielern mit hohen Punktzahlen bekomme, und zeige sie in einem TableLayout zusammen. Ich habe nur Probleme mit den Zeilen-/Spaltenpositionen.

nothing

Hier mein Code ist:

public void onResume() { 
    super.onResume(); 

    //============================================= 
    TextView number = new TextView(this); 
    number.setText("1"); 
    TextView place = new TextView(this); 
    place.setText("4th"); 
    TextView testScore = new TextView(this); 
    testScore.setText("113489"); 
    table = new TableLayout(this); 
    //rows = new Stack<TableRow>(); 
    TableRow row = new TableRow(this); 
    row.addView(number); 
    row.addView(place); 
    row.addView(testScore); 
    table.addView(row); 
    this.setContentView(table); 
} 

Wenn jemand weiß, wie ich sollte meinen Code aus der aktuellen Situation auf dem Mockup Erwartete Situation ändern, ich schätze es gerne. Wenn ich etwas falsch mache, poste bitte einen Kommentar. Danke im Voraus.

Antwort

0

Ich habe gerade eine gute Verbindung über TableLayout und TableRow gefunden, die spezifische Positionen dynamisch erzeugt. Link is here. Natürlich ist der Code hier nur die Barebones, um ein einfaches Positionslayout zu demonstrieren.

Hier ist mein Code und das gegebene Bild des Ergebnisses:

public void onResume() { 
     super.onResume(); 



     //============================================= 

     dip = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) 1, this.getResources().getDisplayMetrics()); 
     if (dip <= 0) 
      dip = 1; 


     TextView number = new TextView(this); 
     TextView place = new TextView(this); 
     TextView testScore = new TextView(this); 


     number.setText("1"); 
     place.setText("4th"); 
     testScore.setText("113489"); 

     number.setWidth(50 * dip); 
     place.setWidth(75 * dip); 
     testScore.setWidth(150 * dip); 

     number.setPadding(20*dip, 0, 0, 0); 

     table = new TableLayout(this); 
     TableRow row = new TableRow(this); 
     row.addView(number); 
     row.addView(place); 
     row.addView(testScore); 
     table.addView(row, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT)); 
     this.setContentView(table); 
    } 

ich wirklich erstaunt bin, dass es ein Verfahren für die DIP-Einheit zu erhalten. Hätte überhaupt danach suchen sollen. : P

nothing

0

Legen Sie das Layoutgewicht jeder Textansicht auf 1 und die Layoutbreite auf 0 dpi fest. Dadurch werden sie den verfügbaren Speicherplatz gleichmäßig teilen. Sie können die Schwerkraft nach links, Mitte und rechts verwenden, um die maximale Trennung sicherzustellen.

+0

TextView.setLayoutParams() verwendet ViewGroup.LayoutParams(), die ich nicht weiß, welche Parameter von welcher Unterklasse sollte ich verwenden. Wissen Sie? –

Verwandte Themen