Définition de la largeur sur wrap_content pour TextView via le code

91

Quelqu'un peut-il m'aider à définir la largeur de TextViewà wrap_contenttravers le code et non à partir de XML?

Je crée dynamiquement un TextViewcode in, alors y a-t-il de toute façon comment définir sa largeur à wrap_contenttravers le code?

Android_programmer_camera
la source

Réponses:

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

Pour différentes mises en page comme ConstraintLayoutet d'autres, ils ont les leurs LayoutParams, comme ceci:

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

ou

parentView.addView(pf, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
Franco
la source
8
android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
Francisco Corrales Morales
eh bien, la principale différence est que dans le premier code, nous créons déjà un nouveau TextView avec ces paramètres. Dans le second, nous ajoutons dans une vue existante, et nous définissons également ces paramètres. Pour le problème de distribution, je pense que vous devez lancer la classe appropriée
Franco
77

Il existe une autre façon d'obtenir le même résultat. Au cas où vous auriez besoin de définir un seul paramètre, par exemple «hauteur»:

TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);
Dmitry
la source
Cela fonctionne très bien. Si cela est fait, LinearLayoutcela ne semble pas ll.invalidate()nécessaire. Pourquoi?
midiwriter le
1
Je suppose que nous ne saurons jamais
Denny
49

Solution pour changer la TextViewlargeur pour envelopper le contenu .

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
la source
6
Solution simple et appropriée, car elle ne remplace pas les autres paramètres.
CoolMind
2
Marqué ma réponse à supprimer car c'est beaucoup plus simple.
FrankKrumnow
2
C'est la meilleure solution
pedram shabani
4

Je publie un edittext multi-lignes de base Android Java.

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
la source
1

Je pense que ce code répond à votre question

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) 
holder.desc1.getLayoutParams();
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
holder.desc1.setLayoutParams(params);
DeVYaGhI
la source