Tetapkan lebar dan tinggi ImageView secara terprogram?


643

Bagaimana saya bisa mengatur ImageViewlebar dan tinggi suatu program?


4
Aneh kedengarannya, informasi ini cukup sulit ditemukan. Pertanyaannya layak mendapat lebih banyak upvotes.
phunehehe

14
Catatan kaki untuk siapa pun yang berjuang dengan ini berasal dari platform lain. opsi "ukuran dan bentuk agar sesuai" ditangani dengan indah di Android; tetapi sulit ditemukan. Anda biasanya ingin induk pencocokan lebar, konten bungkus tinggi, adjustViewBounds dihidupkan , skala fitToCenter, dan cropToPadding palsu . maka otomatis. Saya sangat berharap ini membantu seseorang!
Fattie

Jawaban:


1100

Mungkin sudah terlambat tetapi demi orang lain yang memiliki masalah yang sama, untuk mengatur ketinggian ImageView:

imageView.getLayoutParams().height = 20;

Semoga ini membantu.

Penting. Jika Anda mengatur ketinggian setelah tata letak telah 'ditata', pastikan Anda juga menelepon:

imageView.requestLayout();

102
Jika Anda mengatur ketinggian setelah tata letak telah 'ditata', pastikan Anda memanggil image_view.requestLayout ()
Rhys Davis

9
bagaimana jika saya perlu wrap_content?
Francisco Corrales Morales

8
Pilih karena suatu hari Anda adalah bos saya dan saya masih belajar dari Anda Hakim :)
Sami Eltamawy

9
@FranciscoCorralesMorales menggunakan ini untuk wrap_content image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT.. Jika tampilan induk LinearLayoutdiganti RelativeLayoutdengan itu
Sami Eltamawy

39
Jadi, bagaimana menentukan unitnya ? Bagaimana mengatakan bahwa itu dp , bukan sp , dll.
Saeed Neamati

231

Jika tampilan gambar Anda dinamis, jawaban yang berisi getLayout akan gagal dengan null-exception.

Dalam hal ini cara yang benar adalah:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);

7
jika saya meletakkan kode itu, gambar saya hilang. Mengapa? ImageView imgLogo = ImageView baru (ini); imgLogo.setImageDrawable (logo); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams (32,32); imgLogo.setLayoutParams (layoutParams); row.addView (imgLogo);
Mustafa Güven

3
Terima kasih atas jawaban ini, tempatkan saya di jalur yang benar. Sebagai catatan tambahan, LinearLayout harus diatur ke tipe tampilan induk dari gambar. Misalnya, jika tampilan gambar Anda di galeri, Anda harus menggunakan parameter tata letak Galeri alih-alih LinearLayout atau Anda akan memiliki pengecualian casting.
profexorgeek

3
@ MustafaGüven Saya punya masalah yang sama dengan Anda, di mana saya ImageViewmenghilang. Caranya adalah membuat tata letak bagian (yaitu, <this_part_here>.LayoutParams) sama dengan apa yang menjadi induknya ImageView. Jadi, misalnya, jika Anda telah menempatkan ImageViewdalam Anda di TableRowdalam TableLayout, Anda harus memilikinya sebagai TableRow.LayoutParams.
user2323030

untuk menguraikan pengguna ($ some_number) -> Anda perlu membuat LayoutParams sesuai induknya dan mengaturnya pada anak (imageView), juga requestLayout () tampaknya tidak diperlukan pada saat penulisan
Bamboomy

lol Anda membuat params baru, jawaban buruk, Anda hanya bisa mendapatkan yang sekarang, maksud saya jika Anda melakukannya (membuat yang baru) maka Anda bahkan tidak perlu xml, kemudian juga membuat / menambahkan imageview secara terprogram ...
user924

52

Cara sederhana ini untuk melakukan tugas Anda:

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);

dan cara lain jika Anda ingin memberikan ukuran dan tinggi layar lebar kemudian gunakan kode di bawah ini:

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);

harap gunakan penuh untuk Anda.


Ini Kerja Baik untukku !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Tampilan layar = 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 = LinearLayout.LayoutParams baru (lebar ,tinggi); iv.setLayoutParams (parms);
Selim Raza

Mengapa orang mendeklarasikan intvariabel jika mereka tidak akan digunakan kembali di tempat lain? Sepertinya tidak perlu tapi saya tidak tahu banyak tentang itu tbh.
n00dles

1
hanya untuk pemahaman yang lebih baik @ n00dles ,,, tidak ada yang lain
duggu

36

Saya telah memainkan ini dengan pixeldan dp.

private int dimensionInPixel = 200;

Cara mengatur oleh piksel :

view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();

Cara mengatur oleh dp :

int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();

Semoga ini bisa membantu Anda.


1
Bagaimana saya melakukan ini untuk nilai dp tertentu (yaitu tidak mengkonversi dari px ke dp)?
alxcyl

@Hiren apa yang dimaksud dengan getResources (). GetDisplayMetrics () ketika saya membaca dokumen, sepertinya itu DisplayMetrics. Tolong jelaskan sedikit. Saya baru mengenal android, terima kasih.
Srini

Disebabkan oleh: java.lang.NullPointerException: Berusaha menulis ke bidang 'int android.view.ViewGroup $ LayoutParams.height' pada referensi objek nol
MD Khali

16

Jika Anda perlu mengatur lebar atau tinggi badan Anda match_parent(sebesar induknya) atau wrap_content(cukup besar agar sesuai dengan konten internalnya sendiri), maka ViewGroup.LayoutParamsbuatlah dua konstanta ini:

imageView.setLayoutParams(
    new ViewGroup.LayoutParams(
        // or ViewGroup.LayoutParams.WRAP_CONTENT
        ViewGroup.LayoutParams.MATCH_PARENT,      
        // or ViewGroup.LayoutParams.WRAP_CONTENT,     
        ViewGroup.LayoutParams.MATCH_PARENT ) );

Atau Anda dapat mengaturnya seperti dalam jawaban Hakem Zaied :

imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...

11

Anda dapat menetapkan nilai untuk semua kasing.

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);

1
Disebabkan oleh: java.lang.NullPointerException: Berusaha menulis ke bidang 'int android.view.ViewGroup $ LayoutParams.height' pada referensi objek nol
MD Khali

8

Cara terbaik dan termudah untuk mengatur tombol secara dinamis adalah

 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());

Tinggi dan lebar di atas adalah dalam piksel px . 45 menjadi tinggi dalam dp dan 42 menjadi lebar dalam dp .

 index.setLayoutParams(new <Parent>.LayoutParams(width, height));

Jadi, misalnya, jika Anda meletakkan tombol di dalam TableRow di dalam TableLayout, Anda harus menjadikannya sebagai TableRow.LayoutParams

 index.setLayoutParams(new TableRow.LayoutParams(width, height));

8

Cukup buat objek LayoutParams dan tetapkan ke imageView Anda

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);

5
image_view.getLayoutParams().height 

mengembalikan nilai tinggi dalam piksel. Anda harus mendapatkan dimensi layar terlebih dahulu untuk mengatur nilai dengan benar.

 Display display = context.getWindowManager().getDefaultDisplay();
 DisplayMetrics outMetrics = new DisplayMetrics();
 display.getMetrics(outMetrics);
 int screen_height = outMetrics.heightPixels;
 int screen_width = outMetrics.widthPixels;

Setelah Anda mendapatkan dimensi layar, Anda dapat mengatur lebar & tinggi tampilan gambar menggunakan margin yang tepat.

 view.getLayoutParams().height = screen_height - 140;
 view.getLayoutParams().width = screen_width - 130 ;

3

Untuk mengatur ImageView dan Tinggi Secara Programatis, Anda dapat melakukannya

            //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);

2

kotlin

val density = Resources.getSystem().displayMetrics.density
view.layoutParams.height = 20 * density.toInt()

1

Dalam skenario di mana ukuran widget perlu diatur secara terprogram, pastikan aturan di bawah ini.

  1. Tetapkan LayoutParam untuk Tata Letak tempat Anda menambahkan tampilan itu . Dalam kasus saya saya menambahkan TableRowjadi saya harus lakukanTableRow.LayoutParams
  2. Ikuti kode ini

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);


1
Saya suka ini. Saya menggunakannya! Terima kasih.
n00dles

0

Jika Anda hanya ingin memasukkan gambar dalam tampilan gambar, Anda dapat menggunakan "wrap content" pada properti tinggi dan lebar dengan tipe skala tetapi jika Anda ingin mengatur secara manual Anda harus menggunakan LayoutParams.

Layoutparams efisien untuk mengatur tinggi dan lebar tata letak secara terprogram.


0
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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.