Як встановитиLayoutParams () для ImageView?


77

Я хочу встановити LayoutParamsдля, ImageViewале, здається, не можу знайти правильний спосіб це зробити.

Я можу знайти документацію в API лише для різних ViewGroups, але не ImageView. Проте, ImageViewсхоже, має цю функціональність.

Цей код не працює ...

myImageView.setLayoutParams(new ImageView.LayoutParams(30,30));

Як це зробити?

Відповіді:


167

Вам потрібно встановити LayoutParams для ViewGroup, в якій знаходиться ImageView. Наприклад, якщо ваш ImageView знаходиться всередині LinearLayout, тоді ви створюєте

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

Це пов’язано з тим, що це батько представлення даних, який повинен знати, який розмір призначити представленням.


2
Ви знаєте ... те, що ви сказали, спрацювало. Але я вже зрозумів цю концепцію, але зробив велику помилку. Бачите, у мене були ImageViews у TableLayout ... тож я використовував TableLayout.setLayoutParams. Але це впаде. Коли я глибше задумався над цим, мені потрібно було перейти до TableRow.setLayoutParams, щоб він нарешті запрацював. Дякую, що змусив мій мозок працювати. "сидить у" спровокувало це для мене ... повинен затлумити ці речі.
DeadTime

21
Я радий, що міг допомогти. Якщо вашу проблему вирішено, чи можете ви позначити це як прийняту відповідь? Це галочка зліва від тексту.
Steve Haley

Привіт @SteveHaley, параметри ширини та висоти тут знаходяться в пікселях, так? Мій досвід показує це, і це шокує порожнє тут: developer.android.com/reference/android/widget/… , int)
ericn

2
@fuzzybee Я думаю, що це в пікселях ... Більшість матеріалів, розміщених у коді, - це пікселі, а не DP. Перетворити пікселі в DP, використовуючи щось на зразокTypedValue.applyDimension(TypedValue.ComplexUnit_DP, 30, getResources().getDisplayMetrics())
Стів Хейлі

19

Стара тема, але зараз у мене була та сама проблема. Якщо хтось зіткнеться з цим, він, мабуть, знайде таку відповідь:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

Це буде працювати, лише якщо ви додасте ImageView як підгляд до LinearLayout. Якщо ви додасте його до RelativeLayout, вам потрібно буде зателефонувати:

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

12

Якщо ви змінюєте макет існуючого ImageView, ви зможете просто отримати поточний LayoutParams, змінити ширину / висоту та встановити його назад:

android.view.ViewGroup.LayoutParams layoutParams = myImageView.getLayoutParams();
layoutParams.width = 30;
layoutParams.height = 30;
myImageView.setLayoutParams(layoutParams);

Не знаю, чи це ваша мета, але якщо вона є, це, мабуть, найпростіше рішення.


Чи потрібно знову призначати LayoutParams за допомогою myImageView.setLayoutParams(layoutParams);? Оскільки ви модифікуєте посилання на LayoutParams, воно не повинно бути.
Вінс,

6

ImageView отримує setLayoutParams із View, який використовує ViewGroup.LayoutParams. Якщо ви використовуєте це, воно в більшості випадків вийде з ладу, тому вам слід використовувати getLayoutParams (), який знаходиться у View.class. Це успадкує батьківський подання ImageView і буде працювати завжди. Ви можете підтвердити це тут: ImageView розширює подання

Припускаючи, що у вас є ImageView, визначений як ' image_view ', а ширина / висота int визначені як 'thumb_size'

Найкращий спосіб зробити це :

ViewGroup.LayoutParams iv_params_b = image_view.getLayoutParams();
iv_params_b.height = thumb_size;
iv_params_b.width = thumb_size;
image_view.setLayoutParams(iv_params_b);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.