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

nieselfriem

Bekanntes Mitglied
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


Java:
  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
 
Zuletzt bearbeitet:
Java:
     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

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:


Java:
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.
 
Java:
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.
 

Zurück
Oben