Impostazione della larghezza su wrap_content per TextView tramite codice


91

Qualcuno può aiutarmi come impostare la larghezza di TextViewper wrap_contenttramite il codice e non da XML?

Sto creando dinamicamente un TextViewcodice in, quindi esiste comunque come impostarne la larghezza wrap_contenttramite codice?

Risposte:


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

Per layout diversi come ConstraintLayoute altri, hanno il loro LayoutParams, in questo modo:

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

o

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

beh, la differenza principale è che nel primo codice stiamo già creando un nuovo TextView con quelle impostazioni. Nella seconda, stiamo aggiungendo a una vista esistente e stiamo anche impostando quei parametri. Per il problema del cast, penso che devi lanciare la classe corretta
— Franco

77

C'è un altro modo per ottenere lo stesso risultato. Nel caso in cui sia necessario impostare un solo parametro, ad esempio "altezza":

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

Funziona alla grande. Se questo viene fatto su LinearLayout, non sembra che ll.invalidate()sia necessario. Perché?
— midiwriter

1
Immagino che non lo sapremo mai
— Denny

49

Soluzione per modificare la TextViewlarghezza per avvolgere il contenuto .

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
Soluzione semplice e giusta, perché non sovrascrive altri parametri.
— CoolMind

2
Contrassegnato la mia risposta per l'eliminazione poiché è molto più semplice.
— FrankKrumnow

2
Questa è la soluzione migliore
— pedram shabani

4

Sto postando edittext multi riga di 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

Penso che questo codice risponda alla tua domanda

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) 
holder.desc1.getLayoutParams();
params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
holder.desc1.setLayoutParams(params);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.