Як я можу програмно встановити ImageView
ширину та висоту?
Як я можу програмно встановити ImageView
ширину та висоту?
Відповіді:
Може бути занадто пізно, але заради інших, хто має таку ж проблему, встановити висоту ImageView:
imageView.getLayoutParams().height = 20;
Сподіваюсь, це допомагає.
Важливо. Якщо ви встановлюєте висоту після того, як макет вже був «викладений», переконайтесь, що ви також зателефонували:
imageView.requestLayout();
image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT
.. Якщо батьківський вигляд LinearLayout
замінить RelativeLayout
його
Якщо ваше перегляд зображень динамічне, відповідь, що містить getLayout, буде невдалою з виключенням null.
У цьому випадку правильний спосіб:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);
ImageView
зникає. Трюк полягає в тому, щоб зробити макетну частину (тобто <this_part_here>.LayoutParams
) такою, якою є батько ImageView
. Так, наприклад, якщо ви розмістили своє місце ImageView
в TableRow
межах TableLayout
, ви повинні мати його як TableRow.LayoutParams
.
Це простий спосіб виконати своє завдання:
setContentView(R.id.main);
ImageView iv = (ImageView) findViewById(R.id.left);
int width = 60;
int height = 60;
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(parms);
і ще один спосіб, якщо ви хочете надати розмір екрану у висоту та ширину, тоді використовуйте код нижче:
setContentView(R.id.main);
Display display = getWindowManager().getDefaultDisplay();
ImageView iv = (LinearLayout) findViewById(R.id.left);
int width = display.getWidth(); // ((display.getWidth()*20)/100)
int height = display.getHeight();// ((display.getHeight()*30)/100)
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(parms);
сподіваюсь, використати повне для вас.
int
змінні, якщо їх не використовуватимуть в іншому місці? Здається, непотрібним, але я не знаю багато про це, tbh.
Я грав у цю одну з pixel
і dp
.
private int dimensionInPixel = 200;
Як встановити піксель :
view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();
Як встановити dp :
int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();
Сподіваюся, це допоможе вам.
Якщо вам потрібно встановити ширину чи висоту match_parent
(такою ж великою, як її батьківська) або wrap_content
(достатньо великою, щоб відповідати її власному внутрішньому вмісту), тоді ViewGroup.LayoutParams
є ці дві константи:
imageView.setLayoutParams(
new ViewGroup.LayoutParams(
// or ViewGroup.LayoutParams.WRAP_CONTENT
ViewGroup.LayoutParams.MATCH_PARENT,
// or ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.MATCH_PARENT ) );
Або ви можете встановити їх як в Hakem Zaied в відповідь :
imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...
Ви можете встановити значення для всіх випадків.
demoImage.getLayoutParams().height = 150;
demoImage.getLayoutParams().width = 150;
demoImage.setScaleType(ImageView.ScaleType.FIT_XY);
Найкращий і найпростіший спосіб динамічно встановити кнопку
Button index=new Button(this);
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 45, getResources().getDisplayMetrics());
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 42, getResources().getDisplayMetrics());
Наведена вище висота та ширина - у пікселях px . 45 - висота в dp, а 42 - ширина в dp .
index.setLayoutParams(new <Parent>.LayoutParams(width, height));
Так, наприклад, якщо ви розмістили свою кнопку в TableRow в TableLayout, ви повинні мати її як TableRow.LayoutParams
index.setLayoutParams(new TableRow.LayoutParams(width, height));
Просто створіть об’єкт LayoutParams та призначте його своєму imageView
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);
image_view.getLayoutParams().height
повертає значення висоти в пікселях. Для правильного встановлення значень спочатку потрібно отримати розміри екрана.
Display display = context.getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
int screen_height = outMetrics.heightPixels;
int screen_width = outMetrics.widthPixels;
Отримавши розміри екрана, ви можете встановити ширину та висоту перегляду зображення, використовуючи належні поля.
view.getLayoutParams().height = screen_height - 140;
view.getLayoutParams().width = screen_width - 130 ;
Щоб програматично встановити ImageView та Height, ви можете зробити це
//Makesure you calculate the density pixel and multiply it with the size of width/height
float dpCalculation = getResources().getDisplayMetrics().density;
your_imageview.getLayoutParams().width = (int) (150 * dpCalculation);
//Set ScaleType according to your choice...
your_imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
У сценарії, коли розмір віджета потрібно задати програмно, дотримуйтесь наведених нижче правил.
LayoutParam
макет, у який ви додаєте цей вид . У моєму випадку я додаю, щоб TableRow
мені довелося це зробитиTableRow.LayoutParams
final float scale = getResources().getDisplayMetrics().density;
int dpWidthInPx = (int) (17 * scale);
int dpHeightInPx = (int) (17 * scale);
TableRow.LayoutParams deletelayoutParams = new TableRow.LayoutParams(dpWidthInPx, dpHeightInPx);
button.setLayoutParams(deletelayoutParams);
tableRow.addView(button, 1);
Якщо ви хочете просто встановити зображення у вікні зображення, ви можете використовувати "загортання вмісту" у властивості висоти та ширини у масштабі типу, але якщо ви хочете встановити вручну, ви повинні використовувати LayoutParams.
Layoutparams ефективний для програмного налаштування висоти та ширини макета.
int newHeight = 150;
int newWidth = 150;
holder.iv_arrow.requestLayout();
holder.iv_arrow.getLayoutParams().height = newHeight;
holder.iv_arrow.getLayoutParams().width = newWidth;
holder.iv_arrow.setScaleType(ImageView.ScaleType.FIT_XY);
holder.iv_arrow.setImageResource(R.drawable.video_menu);