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 ?

Android_programmer_camera
quelle

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));
Franco
quelle
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);
Dmitry
quelle
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
Phan Van Linh
quelle
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 */
Aadarsh ​​Mathur
quelle
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);
DeVYaGhI
quelle