코드를 통해 TextView의 wrap_content에 너비 설정


92

누구든지 XML이 아닌 코드 TextViewwrap_content통해 너비를 설정하는 방법을 도울 수 있습니까 ?

동적으로 TextView코드를 만들고 있으므로 wrap_content코드 를 통해 너비를 설정하는 방법이 있습니까?

답변:


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

ConstraintLayout및 기타 와 같은 다른 레이아웃 의 LayoutParams경우 다음과 같이 자체 .

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

또는

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

음, 주요 차이점은 첫 번째 코드에서 이미 해당 설정으로 새 TextView를 만들고 있다는 것입니다. 두 번째 항목에서는 기존 뷰에 추가하고 해당 매개 변수도 설정합니다. 캐스트 문제에 대해서는 적절한 클래스를 캐스팅해야한다고 생각합니다
Franco

78

동일한 결과를 얻는 또 다른 방법이 있습니다. 하나의 매개 변수 만 설정해야하는 경우 (예 : 'height') :

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

이것은 훌륭하게 작동합니다. 이것이 수행되면 필요 LinearLayout하지 않은 것 같습니다 ll.invalidate(). 왜?
midiwriter

1
나는 우리가 결코 알지 못할 것 같아요
Denny

49

내용TextView감싸기 위해 너비를 변경하는 솔루션입니다 .

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
다른 매개 변수를 무시하지 않기 때문에 간단하고 올바른 솔루션입니다.
CoolMind

2
이것이 훨씬 간단하기 때문에 내 답변을 삭제로 표시했습니다.
FrankKrumnow

2
이것이 최고의 솔루션입니다
pedram shabani

4

android Java base multi line edittext를 게시하고 있습니다.

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

이 코드가 귀하의 질문에 대답한다고 생각합니다.

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

0

이 게시물에 대한 약간의 업데이트 : Android 프로젝트 내에서 ktx를 사용하는 경우 LayoutParams를 훨씬 쉽게 업데이트 할 수있는 약간의 도우미 메서드가 있습니다.

예를 들어 너비 만 업데이트하려면 Kotlin에서 다음 줄을 사용하여 업데이트 할 수 있습니다.

tv.updateLayoutParams { width = WRAP_CONTENT }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.