Festlegen der Breite für wrapVcontent für TextView über Code


90

Kann mir jemand helfen, wie man die Breite von TextViewbis wrap_contentdurch Code und nicht von XML einstellt ?

Ich erstelle dynamisch einen TextViewIn-Code. Gibt es also überhaupt Möglichkeiten, die Breite auf wrap_contentDurch-Code einzustellen ?

Antworten:


125
TextView pf = new TextView(context);
pf.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

Für verschiedene Layouts wie ConstraintLayoutund andere haben sie ihre eigenen LayoutParams, wie folgt:

pf.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

oder

parentView.addView(pf, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

8
android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
Francisco Corrales Morales

Nun, der Hauptunterschied besteht darin, dass wir im ersten Code bereits eine neue Textansicht mit diesen Einstellungen erstellen. Im zweiten Schritt fügen wir eine vorhandene Ansicht hinzu und legen diese Parameter fest. Für das Besetzungsproblem denke ich, dass Sie die richtige Klasse
Franco

76

Es gibt einen anderen Weg, um das gleiche Ergebnis zu erzielen. Falls Sie nur einen Parameter einstellen müssen, zum Beispiel 'height':

TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);

Das funktioniert super. Wenn dies auf gemacht wird LinearLayout, scheint es nicht ll.invalidate()notwendig zu sein. Warum?
Midiwriter

1
Ich denke, wir werden es nie erfahren
Denny

49

Lösung zum Ändern der TextViewBreite zum Umschließen von Inhalten .

textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; 
textView.requestLayout();  
// Call requestLayout() for redraw your TextView when your TextView is already drawn (laid out) (eg: you update TextView width when click a Button). 
// If your TextView is drawing you may not need requestLayout() (eg: you change TextView width inside onCreate()). However if you call it, it still working well => for easy: always use requestLayout()

// Another useful example
// textView.getLayoutParams().width = 200; // For change `TextView` width to 200 pixel

6
Einfache und richtige Lösung, da andere Parameter nicht überschrieben werden.
CoolMind

2
Markierte meine Antwort zum Löschen, da dies viel einfacher ist.
FrankKrumnow

2
Dies ist die beste Lösung
Pedram Shabani

4

Ich poste Android Java Base Multi Line Edittext.

EditText editText = findViewById(R.id.editText);/* edittext access */

ViewGroup.LayoutParams params  =  editText.getLayoutParams(); 
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
editText.setLayoutParams(params); /* Gives as much height for multi line*/

editText.setSingleLine(false); /* Makes it Multi line */

1

Ich denke, dieser Code beantwortet Ihre Frage

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) 
holder.desc1.getLayoutParams();
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
holder.desc1.setLayoutParams(params);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.