Definir largura como wrap_content para TextView por meio de código

91

Alguém pode me ajudar como definir a largura de TextViewpara wrap_contentatravés do código e não de XML?

Estou criando dinamicamente um TextViewno código, então há alguma maneira de definir sua largura wrap_contentatravés do código?

Android_programmer_camera
fonte

Respostas:

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

Para layouts diferentes como ConstraintLayoute outros, eles têm seus próprios LayoutParams, assim:

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
fonte
8
android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
Francisco Corrales Morales
bem, a principal diferença é que no primeiro código estamos criando um novo TextView com essas configurações. No segundo, estamos adicionando em uma visão existente, e também estamos definindo esses parâmetros. Para o problema do elenco, acho que você deve lançar a classe adequada
Franco
77

Existe outra maneira de obter o mesmo resultado. Caso você precise definir apenas um parâmetro, por exemplo 'altura':

TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);
Dmitry
fonte
Isso funciona muito bem. Se isso for feito LinearLayout, não parece que ll.invalidate()seja necessário. Por quê?
midiwriter
1
Acho que nunca saberemos
Denny
49

Solução para alterar a TextViewlargura para envolver o conteúdo .

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
fonte
6
Solução simples e correta, pois não sobrescreve outros parâmetros.
CoolMind de
2
Marquei minha resposta para excluir, pois é muito mais simples.
FrankKrumnow
2
Esta é a melhor solução
pedram shabani 01 de
4

Estou postando texto de edição de várias linhas com base em Java para Android.

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
fonte
1

Acho que este código responde à sua pergunta

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