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.