Attribute dynamisch setzen in einer TextView bei Kotline

  • Antworten:11
  • Forum-Beiträge: 562

26.12.2022, 21:32:19 via Website

Hallo zusammen

Ich möchte zu Laufzeit die Attribute meiner TextView ändern.

        var txt_feld1 = TextView(view.context)

// txt_feld1.width = 0
// txt_feld1.height = LayoutParams.WRAP_CONTENT
tabrow1.addView(txt_feld1)
txt_feld1.setText("Name")
txt_feld1.setTextSize(16f)
// txt_feld1.setWidth(0)
// txt_feld1.setHeight(LayoutParams.WRAP_CONTENT)

Aber ich kriege es einfach nicht hin. Wenn ich es auf die eine oder andere Art mache, dann läuft die App aber die TextView wird nicht mehr gezeigt.
Ebenfalls würde ich gerne das Attribut "weight" auf 1 setzen, so dass sich die Objekte regelmässig auf den Bildschirm verteilen werden.

Wie muss ich vorgehen damit es funktioniert?

Gruss Renato

Kommentieren
  • Forum-Beiträge: 1.503

27.12.2022, 09:20:57 via Website

Hallo hier stellt sich die Frage in welchem Layout (Typ) du das Textfeld hinzufügst.
Bei einen Constrain zb musst du auch mindestens zwei Ankerpunkte (Constrains) setzen.

Hilfreich?
Kommentieren
  • Forum-Beiträge: 562

27.12.2022, 11:15:41 via Website

Ciao Jokel

Herzlichen Dank für deine Antwort. Obwohl ich sie nicht ganz verstehe.
Ich habe ein LinearLayout. Was ich machen möchte, sind die Attribute der TextView verändern. Das hat doch mit dem Layout nichts zu tun. Oder verstehe ich da was falsch?

Gruss Renato

Hilfreich?
Kommentieren
  • Forum-Beiträge: 1.503

27.12.2022, 11:34:08 via Website

Du erstellst ja ein neues textview mit new. Und fügst doch einem vorhandenen Layout hinzu.

Wenn du ein in xml erstelltes ändern willst dann müsstest du das mit findViewById oder Viewbinding suchen und verändern.

— geändert am 27.12.2022, 11:35:53

Hilfreich?
Kommentieren
  • Forum-Beiträge: 1.503

27.12.2022, 11:40:36 via Website

In Kotlin wird kein new benutz ist aber in der ersten Zeile beim erzeugen des Objekts intern vorhanden. Du erstellst mit
var txt_feld1 = TextView(view.context)

ein neues Objekt (Java new).

Wo fügst du das Objekt dem vorhandenen Layout hinzu?
Denn Code sehen wir nicht.

— geändert am 27.12.2022, 11:48:29

Hilfreich?
Kommentieren
  • Forum-Beiträge: 562

27.12.2022, 11:57:35 via Website

Ich füge die TextView in der ersten Zeile nach dem ersten Kommentar hinzu.

Hilfreich?
Kommentieren
  • Forum-Beiträge: 1.503

27.12.2022, 15:01:14 via Website

Du musst schon ein Objekt LayoutParams erstellen und das der View übergeben.
mittels setLayoutParams().

var txt_feld1 = TextView(view.context)
var feld_lp = LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
txt_feld1.setLayoutParams(feld_lp)


tabrow1.addView(txt_feld1)
txt_feld1.setText("Name")
txt_feld1.setTextSize(16f) 
Hilfreich?
Kommentieren
  • Forum-Beiträge: 562

29.12.2022, 10:48:06 via Website

Ciao Jokel

Herzlichen dank für deine Antwort.
Das funktioniert. Aber das Attribut "weight" kann ich nicht setzen. Ich möchte dies machen, damit sich die TextViews gleichmässig auf die Breite verteilt.

Geht das oder kann man das einfach so nicht machen?

Gruss Renato

Hilfreich?
Kommentieren
  • Forum-Beiträge: 562

30.12.2022, 08:29:28 via Website

Ciao Jokel

Ich habe in der Doku nachgeschaut. Dort steht für den dritten Parameter "gravity". Und ich bin der Meinung das steht für die Position wo es angezeigt wird (links, rechts oder in der Mitte).

Auf jeden Fall so geht es nicht. Ich denke, dass ich die Feldbreite selber berechnen muss. Bildschirmgrösse ermitteln und dann Feldbreite berechnen.

Mal schauen ob ich das hinkriege.

Gruss Renato

Hilfreich?
Kommentieren
  • Forum-Beiträge: 1.503

30.12.2022, 09:58:53 via Website

Der dritte paraneter ist definitiv das Gewicht (Weight) .
https://developer.android.com/reference/android/widget/LinearLayout.LayoutParams#LayoutParams(int,%20int,%20float)
Was steht hier in der Doku.

Willst du die Ausrichtung Anziehung (Gravity)
Dann
Textfeld.setGravity(....)

Zeige doch mal in einer Zeichnung was du in dem Linearlayout erreichen willst.

Gaube du hast da ein Verständnis Problem.

Schaue nochmal die doku zu dem Tehma Weight Gravity Margin

— geändert am 30.12.2022, 10:02:43

Hilfreich?
Kommentieren
  • Forum-Beiträge: 562

30.12.2022, 14:48:39 via Website

Ciao Jokel

Ich konnte das Problem lösen. Ich hatte den falschen import.

https://developer.android.com/reference/android/app/ActionBar.LayoutParams.html#LayoutParams(int,%20int,%20int)

Bei diesem Objekt ist der dritte Parameter tatsächlich den gravity. Im LinearLayout ist der dritte Parameter das Gewicht. So habe ich immer an dir vorbei geredet. Aber nun geht es.

Danke für deine Hilfe und Geduld.

Gruss Renato

Hilfreich?
Kommentieren