Вопрос по android – Android view layout_width - как изменить программно?

50

Это мое мнение, и я хочу изменить layout_width на "10dip". Как мне сделать это программно? Обратите внимание, что это не LinearLayout, это View.

<View 
    android:id="@+id/nutrition_bar_filled" 
    android:background="@drawable/green_rectangle" 
    android:layout_height="30dp"
    android:layout_width="50dp"/>       

Я знаю о LayoutParams. Как я могу использовать его, чтобы установить ширину 10dip?

Ваш Ответ

4   ответа
4

Или просто:

view.getLayoutParams().width = 400;
view.requestLayout();
13

viewinstance.setLayoutParams(new LayoutParams(width, height));
Я думаю, что это неправильный подход, он потеряет любые другие атрибуты макета, которые были установлены, например. layout_gravity
8

View view_instance = (View)findViewById(R.id.nutrition_bar_filled);
view_instance.setWidth(10);

использованиеLayoutparams  чтобы сделать это, где вы можете установить ширину и высоту, как показано ниже.

LayoutParams lp = new LayoutParams(10,LayoutParams.wrap_content);
View_instance.setLayoutParams(lp);
можешь уточнить? Я почти готов отметить вас как правильный ответ. Как мне получить view_instance? Henley Chiu
Это первое, что я попробовал. Казалось бы, очень интуитивно, но setWidth не является допустимой функцией для представления. Вид заполненных баров = rowView.findViewById (R.id.nutrition_bar_filled); fillBar.setWidth (10) & lt; - недействительно. Henley Chiu
@Hisoka использоватьfindViewById(R.id.nutrition_bar_filled) чтобы получить представление
Метод setWidth (int) не определен для типа View Henley Chiu
затем использовать параметры макета, это определенно работает
126

что ваш вопрос заключается в том, чтобы динамически изменять только ширину вида, в то время как вышеуказанные методы полностью изменят свойства макета на новые, поэтому я предлагаю сначала получить getLayoutParams () из представления, затем установить ширину для layoutParams и, наконец, установить layoutParams для представления, поэтому следуйте приведенным ниже шагам, чтобы сделать то же самое.

View view = findViewById(R.id.nutrition_bar_filled);
LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = newWidth;
view.setLayoutParams(layoutParams);
@snayde Я полагаю, что установка параметров ширины и высоты для LayoutParams View приводит к его повторному измерению и разметке
@TonyWickham, как это работает?
Вы также можете просто сделать & quot; view_instance.getLayoutParams (). Width = newOne; & quot;
чтобы получить такие значения, какmatch_parent, это работает:LayoutParams.MATCH_PARENT
@TonyWickham посмотрел на реализацию класса View, так и не понял, как это происходит :(

Похожие вопросы