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


92

Может кто - нибудь помочь мне , как установить ширину , TextViewчтобы с wrap_contentпомощью кода , а не из XML?

Я динамически создаю 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
Франсиско Корралес Моралес

Ну, основная разница в том, что в первом коде мы уже создаем новый 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
Это лучшее решение
педрам шабани 01

4

Я публикую многострочный текст редактирования для 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

Я думаю, этот код отвечает на ваш вопрос

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.