Tetapkan lebar dan tinggi ImageView secara terprogram?

643

Bagaimana saya bisa mengatur ImageViewlebar dan tinggi suatu program?

Praveenb
sumber
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();
Hakem Zaied
sumber
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);
InvulgoSoft
sumber
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.

Duggu
sumber
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.

Hiren Patel
sumber
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;
//...
Omar
sumber
11

Anda dapat menetapkan nilai untuk semua kasing.

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);
tienanhcntt2
sumber
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));
Ali Kahoot
sumber
8

Cukup buat objek LayoutParams dan tetapkan ke imageView Anda

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);
Zubair Akber
sumber
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 ;
Vara
sumber
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);
BharathRao
sumber
2

kotlin

val density = Resources.getSystem().displayMetrics.density
view.layoutParams.height = 20 * density.toInt()
William Hu
sumber
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);

Rohit Mandiwal
sumber
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.

raj kavadia
sumber
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);
MEGHA DOBARIYA
sumber