Встановлення ширини wrap_content для TextView через код


92

Хто-небудь може мені допомогти, як встановити ширину TextViewдоwrap_content наскрізного коду, а не з XML?

Я динамічно створюю TextViewin-код, так чи є в будь-якому випадку, як встановити його ширину 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
Франсіско Корралес Моралес

ну, головна різниця полягає в тому, що в першому коді ми створюємо новий TextView з такими налаштуваннями. У другому - ми додаємо до існуючого подання, а також встановлюємо ці параметри. Щодо проблеми з акторським складом, я думаю, ви повинні віддати належний клас
Франко

78

Існує ще один спосіб досягти того самого результату. Якщо вам потрібно встановити лише один параметр, наприклад 'висота':

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
Думаю, ми ніколи не дізнаємось
Денні

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

Я публікую андроїд 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

Я думаю, що цей код відповідає на ваше запитання

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

0

Невелике оновлення цієї публікації: якщо ви використовуєте ktx у своєму проекті Android, існує невеликий допоміжний метод, який значно полегшує оновлення LayoutParams.

Якщо ви хочете оновити, наприклад, лише ширину, ви можете зробити це за допомогою наступного рядка в Kotlin.

tv.updateLayoutParams { width = WRAP_CONTENT }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.