# "Schöne" Datatable in Android und setzen von Parametern von Textview im Code



## nieselfriem (3. Jun 2022)

Hallo,


ich versuche mich ein wenig in einer AndroidApp. Dazu möchte ich daten schön in einer Tabelle darzustellen. Ich bekomme sie in einer Tabelle dargestellt, aber nicht schön.


Aktuell sieht das eher wie eine alte HTML-Tabelle aus den 90er aus.


Nun gibt es ein tolle Youtube-Tutorial wie man Tabelle mit Tableview erstellt. Das nützt jedoch sehr wenig, weil es eben auf der XML-Ebene arbeitet und mit festgelegten Anzahlen von Rows und Textviews. Das Problem ist nicht, dass ich die Tabelle dynamisch hinbekommen. Mein Problem ist, wie ich im Code, die einzelnen tableview im Aussehen beeinflusse, was ich sonst im Layout mache.
Hier mal der Link zum Video: 



Das dazugehöre GIT: https://github.com/ditook/MyTable


und meine Tabelle aktuelle Tabelle, die noch statisch ist aber später in einer schleife dynamisch über die Liste iteriert generiert werden soll



```
fun addTable(tempList: GartenTempResponse) {
        var tblLayout: TableLayout =  findViewById(R.id.tableMain)
        val tbrow0 : TableRow= TableRow(this)
        val tv0 = TextView(this)
        val tv1 = TextView(this)
        val tv2 = TextView(this)
        tv0.text = ""
        tv0.setPadding(10,10,10,10)
        tv0.lay
        tv1.setPadding(10,10,10,10)
        tv1.text = "Aussen"
        tv2.setPadding(10,10,10,10)
        tv2.text = "Innen"
        tbrow0.addView(tv0)
        tbrow0.addView(tv1)
        tbrow0.addView(tv2)
        tblLayout.addView(tbrow0)
        val maxTemps=CalcAggreateTemp(tempList).calcMaxTemps()
        val minTemps = CalcAggreateTemp(tempList).calcMinTemps()
        val avgTemps =CalcAggreateTemp(tempList).calcAvgTemps()
        val currentTemps = CalcAggreateTemp(tempList).currentTemps()
        //current
        val tableRowCurrent = TableRow(this)
        val tvCurrentTemp0 = TextView(this)
        tvCurrentTemp0.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvCurrentTemp0.setPadding(10,10,10,10)
        tvCurrentTemp0.text = "Akt. Temperatur"
        tvCurrentTemp0.setTextColor(Color.BLACK)
        tvCurrentTemp0.gravity = Gravity.CENTER_HORIZONTAL
        tableRowCurrent.addView(tvCurrentTemp0)
        val tvCurrentTemp1 = TextView(this)
        tvCurrentTemp1.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvCurrentTemp1.setPadding(10,10,10,10)
        tvCurrentTemp1.text = currentTemps["temp1"].toString()
        tvCurrentTemp1.setTextColor(Color.BLACK)
        tvCurrentTemp1.gravity = Gravity.CENTER_HORIZONTAL
        tableRowCurrent.addView(tvCurrentTemp1)
        val tvCurrentTemp2 = TextView(this)
        tvCurrentTemp2.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvCurrentTemp2.setPadding(10,10,10,10)
        tvCurrentTemp2.text = currentTemps["temp2"].toString()
        tvCurrentTemp2.setTextColor(Color.BLACK)
        tvCurrentTemp2.gravity = Gravity.CENTER_HORIZONTAL
        tableRowCurrent.addView(tvCurrentTemp2)
        tblLayout.addView(tableRowCurrent)
        //maximum
        val tableRowMax = TableRow(this)
        val tvMaxTemp0 = TextView(this)
        tvMaxTemp0.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvMaxTemp0.setPadding(10,10,10,10)
        tvMaxTemp0.text = "max. Temperatur:"
        tvMaxTemp0.setTextColor(Color.BLACK)
        tvMaxTemp0.gravity = Gravity.CENTER_HORIZONTAL
        tableRowMax.addView(tvMaxTemp0)
        val tvMaxTemp1 = TextView(this)
        tvMaxTemp1.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvMaxTemp1.setPadding(10,10,10,10)
        tvMaxTemp1.text = maxTemps["temp1"].toString()
        tvMaxTemp1.setTextColor(Color.BLACK)
        tvMaxTemp1.gravity = Gravity.CENTER_HORIZONTAL
        tableRowMax.addView(tvMaxTemp1)
        val tvMaxTemp2 = TextView(this)
        tvMaxTemp2.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvMaxTemp2.setPadding(10,10,10,10)
        tvMaxTemp2.text = maxTemps["temp2"].toString()
        tvMaxTemp2.setTextColor(Color.BLACK)
        tvMaxTemp2.gravity = Gravity.CENTER_HORIZONTAL
        tableRowMax.addView(tvMaxTemp2)
        tblLayout.addView(tableRowMax)
        //Minimum
        val tableRowMin = TableRow(this)
        val tvMinTemp0 = TextView(this)
        tvMinTemp0.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvMinTemp0.setPadding(10,10,10,10)
        tvMinTemp0.text = "min. Temperatur:"
        tvMinTemp0.setTextColor(Color.BLACK)
        tvMinTemp0.gravity = Gravity.CENTER_HORIZONTAL
        tableRowMin.addView(tvMinTemp0)
        val tvMinTemp1 = TextView(this)
        tvMinTemp1.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvMinTemp1.setPadding(10,10,10,10)
        tvMinTemp1.text = minTemps["temp1"].toString()
        tvMinTemp1.setTextColor(Color.BLACK)
        tvMinTemp1.gravity = Gravity.CENTER_HORIZONTAL
        tableRowMin.addView(tvMinTemp1)
        val tvMinTemp2 = TextView(this)
        tvMinTemp2.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvMinTemp2.setPadding(10,10,10,10)
        tvMinTemp2.text = minTemps["temp2"].toString()
        tvMinTemp2.setTextColor(Color.BLACK)
        tvMinTemp2.gravity = Gravity.CENTER_HORIZONTAL
        tableRowMin.addView(tvMinTemp2)

        tblLayout.addView(tableRowMin)

        //Minimum
        val tableRowAvg = TableRow(this)
        val tvAvgTemp0 = TextView(this)
        tvAvgTemp0.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvAvgTemp0.setPadding(10,10,10,10)
        tvAvgTemp0.text = "∅ Temperatur:"
        tvAvgTemp0.setTextColor(Color.BLACK)
        tvAvgTemp0.gravity = Gravity.CENTER_HORIZONTAL
        tableRowAvg.addView(tvAvgTemp0)
        val tvAvgTemp1 = TextView(this)
        tvAvgTemp1.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvAvgTemp1.setPadding(10,10,10,10)
        tvAvgTemp1.text = avgTemps["temp1"].toString()
        tvAvgTemp1.setTextColor(Color.BLACK)
        tvAvgTemp1.gravity = Gravity.CENTER_HORIZONTAL
        tableRowAvg.addView(tvAvgTemp1)
        val tvAvgTemp2= TextView(this)
        tvAvgTemp2.background = (ContextCompat.getDrawable(this, R.drawable.cell_border))
        tvAvgTemp2.setPadding(10,10,10,10)
        tvAvgTemp2.text = avgTemps["temp2"].toString()
        tvAvgTemp2.setTextColor(Color.BLACK)
        tvAvgTemp2.gravity = Gravity.CENTER_HORIZONTAL
        tableRowAvg.addView(tvAvgTemp2)

        tblLayout.addView(tableRowAvg)   
    }
```


Lange Rede kurzer Sinn. Wie kann ich die ganzen Parameter für das Textview design im Code layout_weight, layout_width oder layout_height  usw. im Code/Dynamisch dem jeweiligen Textview hinzufügen? 
Gibt es ein anderes Beispiel/Tutorial bzw. für eine DataTable  in Android?


VG niesel


----------



## Jw456 (3. Jun 2022)

```
TableLayout TL = new TableLayout(this);
   
     LayoutParams LLParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);

     TL.setLayoutParams(LLParams);

     // jetzt das TL Layout dem Activity layout hinzufügen
```



			https://developer.android.com/reference/android/widget/TableLayout
		



			https://developer.android.com/reference/android/view/View#setLayoutParams(android.view.ViewGroup.LayoutParams)


----------



## Jw456 (3. Jun 2022)

TextView 
    setHeight (int pixels)  , setWidth(int pixels)


----------



## nieselfriem (3. Jun 2022)

Jw456 hat gesagt.:


> ```
> TableLayout TL = new TableLayout(this);
> 
> LayoutParams LLParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
> ...


Naja das kann ich ja im Layout editieren, da sich das nicht verändert und beim textview möchte ich ja keine festen werte in der breiten und Höhe setzen sondern wrap_content. Wenn ich das dann aber mit LayoutParams mache, muss ich dann Layoutparams für Tablelayout verwenden um ein textview zu bearbeiten oder das direkt für das textview?

erstelle ich dann folgendes:



```
al LLParams =
            ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
    
tv0.layoutParams = LLParams
tv1.layoutParams = LLParams

....
```

ist die Tabelle nicht mehr zu sehen.


----------



## Jw456 (3. Jun 2022)

Warum eigentlich so kompliziert? 
Mache doch ein Layout für eine Row und inflate das und füge das der Tabelle hinzu.


----------



## Jw456 (4. Jun 2022)

```
val LLParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
    
tv0..setLayoutParams(LLParams)
tv1.setLayoutParams(LLParams)
```

Da TextView auch von View erbt sollte passen. 
Ich würde die  Methoden benuten nicht die einfachen zuweisungen.


----------

