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?

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));

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);

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

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 */

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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.