2017-03-07 6 views
2

Obwohl das viel wiederholte Frage aber erstes Mal für mich aussieht. Ich habe überall gesucht und konnte das Ergebnis nicht bekommen und landete hier.TableRow dynamisch zu TableLayout in XML hinzufügen

Ich erstelle eine Tabelle dynamisch, von der der TableLayout Teil in Xml-Teil geschrieben wird.

<RelativeLayout 
     android:layout_width="70dp" 
     android:layout_height="40dp" 
     android:background="@color/colorPrimaryDark" 
     android:id="@+id/componentA"> 
     <TableLayout 
      android:layout_width="match_parent" 
      android:layout_height="40dp" 
      android:gravity="center" 
      android:id="@+id/tl_componentA"> 


     </TableLayout> 

</RelativeLayout> 

Ich habe ein Objekt für die Tabelle

TableLayout tableLayoutA; 
tableLayoutA= (TableLayout)view.findViewById(R.id.tl_componentA); 

Jetzt habe ich versucht, von hier an als

createTableRowColumn(tableLayoutA); 

zugehörigen Funktionen sind

private void createTableRowColumn(TableLayout tableLayout){ 

     TableRow tableRow1= new TableRow(this.context); 
     tableRow1.setBackgroundColor(getResources().getColor(R.color.colorAccent)); 
     setTableRowColumnProperty(tableRow1); 
     tableLayout.addView(tableRow1); 
    } 

eine Zeile dynamisch hinzufügen private void setTa bleRowColumnProperty (TableRow TableRow) {

TableRow.LayoutParams layoutParams= new TableRow.LayoutParams(70, 40); 
    tableRow.setLayoutParams(layoutParams); 
} 

Ich tat dies alles und nichts hat mir gezeigt, in der emulater. Aber als ich dieselbe Struktur in XML manuell gab, dann funktionierte die Sache gut.

Aus diesem Grund habe ich versucht, etwas

Toast.makeText(getContext(), tableLayoutA.getHeight()+"", Toast.LENGTH_LONG).show(); 

In Toast, um herauszufinden, es war mir zeigt 0. ich nicht, warum bekommen konnte, obwohl ich die Größe für tableLayoutA in der selbst xml behoben haben.

+0

Können Sie es bitte ausarbeiten? –

+0

Wie auch immer, ich verstehe durch dynamische, wenn sich Daten in Ihrem TableLayout ständig ändern, ist das, was Sie sagen wollen? oder –

+0

Kannst du bitte den Code korrigieren und posten, damit ich dorthin komme, wo ich falsch liege? –

Antwort

2

Eine Tabelle im wirklichen Leben benötigt mindestens eine Zeile und eine Spalte. Sie haben die Tabelle nicht angezeigt, weil Sie nur eine Zeile erstellt haben, aber es gab keine Spalte.

Sie müssen der Zeile eine Spalte hinzufügen, damit etwas sichtbar ist.

Versuchen Sie folgendes:

TextView label_date = new TextView(this); 
    label_date.setText("DATE"); 
    label_date.setTextColor(Color.WHITE); 
    label_date.setPadding(5, 5, 5, 5); 
    tableRow.addView(label_date);// add the column to the table row here 

    tableLayout.addView(tableRow, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

können Sie die Textview ersetzen mit dem, was der Wert, den Sie es sein wollen.

tableLayout.addView(tableRow, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

Hier ist, was passiert ist, sagen Sie, fügen Sie einen Blick in Tablelayout und sagen Ihnen, was es sehen können, und Sie sagen auch, die Breite und die Höhe der Ansicht wickeln sollte seinen Inhalt.

Auch die Angabe 40,70 ist keine gute Idee, was passiert, wenn Sie unterschiedliche Bildschirmgrößen haben. Verwenden Sie außerdem eine Bibliothek, um das Hinzufügen und Entfernen dynamischer Ansichten zu verarbeiten. Sie müssen das Rad nicht neu erfinden und sparen viel Zeit und Mühe. Für Tabellenansichten könnte https://github.com/EsotericSoftware/tablelayout ein guter sein (nicht sicher). Eine andere Frage ist, ist Tabellenansicht, wonach Sie suchen? Stellen Sie sicher, dass Sie RecyclerView nicht für Tabellenansichten verwechseln, ich sage das, weil ich Ihren Anwendungsfall nicht verstehe.

Nützliche Verbindung: https://technotzz.wordpress.com/2011/11/04/android-dynamically-add-rows-to-table-layout/

+0

Das funktioniert. Kannst du mir bitte erklären, was passiert ist? Erläutern Sie auch, wie das funktioniert --- tableLayout.addView (tableRow, neue ViewGroup.LayoutParams (ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); –

+0

up vote, wenn Sie meine Antwort nützlich finden – rgv

+0

Warum haben Sie TableRow.LayoutParams nicht verwendet? –

Verwandte Themen