Bir ImageView
genişliğini ve yüksekliğini programsal olarak nasıl ayarlayabilirim ?
Bir ImageView
genişliğini ve yüksekliğini programsal olarak nasıl ayarlayabilirim ?
Yanıtlar:
Çok geç olabilir, ancak aynı sorunu olan başkalarının uğruna ImageView yüksekliğini ayarlamak için:
imageView.getLayoutParams().height = 20;
Bu yardımcı olur umarım.
Önemli. Yüksekliği, düzen zaten düzenlendikten sonra ayarlıyorsanız, şunları da aradığınızdan emin olun:
imageView.requestLayout();
image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT
.. Eğer görünüm üst onun LinearLayout
yerine RelativeLayout
onunla
Resim görünümünüz dinamikse, getLayout'u içeren cevap null istisnayla başarısız olur.
Bu durumda doğru yol:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);
ImageView
kayboldum. İşin püf noktası mizanpaj parçasını (yani <this_part_here>.LayoutParams
) ebeveyni ile aynı yapmaktır ImageView
. Yani, örneğin istemiyorsun, mutfakta annene yerleştirdiğiniz takdirde ImageView
bir mesafede TableRow
bir mesafede TableLayout
, bunu olarak sahip olmalıdır TableRow.LayoutParams
.
Görevinizi yapmanın bu basit yolu:
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);
ve ekran boyutunu yükseklik ve genişlik vermek istiyorsanız, aşağıdaki kodu kullanın:
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);
umut dolu kullanın.
int
başka bir yerde yeniden kullanılmayacaklarsa neden değişkenler bildiriyorlar? Gereksiz görünüyor ama bunun hakkında fazla bir şey bilmiyorum.
Birlikte bu bir oynamış pixel
ve dp
.
private int dimensionInPixel = 200;
Piksel ile nasıl ayarlanır :
view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();
Dp tarafından nasıl ayarlanır :
int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();
Umarım bu sana yardımcı olur.
Genişliğinizi veya yüksekliğinizi match_parent
(üst öğesi kadar büyük) veya wrap_content
(kendi dahili içeriğine uyacak kadar büyük) olarak ayarlamanız gerekiyorsa ViewGroup.LayoutParams
, bu iki sabit vardır:
imageView.setLayoutParams(
new ViewGroup.LayoutParams(
// or ViewGroup.LayoutParams.WRAP_CONTENT
ViewGroup.LayoutParams.MATCH_PARENT,
// or ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.MATCH_PARENT ) );
Ya da bunları Hakem Zaied'in cevabı gibi ayarlayabilirsiniz :
imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...
Tüm vakalar için değer ayarlayabilirsiniz.
demoImage.getLayoutParams().height = 150;
demoImage.getLayoutParams().width = 150;
demoImage.setScaleType(ImageView.ScaleType.FIT_XY);
Bir düğmeyi dinamik olarak ayarlamanın en iyi ve en kolay yolu
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());
Yukarıdaki yükseklik ve genişlik piksel piksel cinsindendir . 45 dp cinsinden yükseklik ve 42 dp cinsinden genişliktir .
index.setLayoutParams(new <Parent>.LayoutParams(width, height));
Örneğin, düğmenizi bir TableLayout içindeki TableRow içine yerleştirdiyseniz, TableRow.LayoutParams olarak sahip olmalısınız.
index.setLayoutParams(new TableRow.LayoutParams(width, height));
Bir LayoutParams nesnesi oluşturun ve bunu imageView öğenize atayın
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);
image_view.getLayoutParams().height
yükseklik değerini piksel cinsinden döndürür. Değerleri doğru şekilde ayarlamak için önce ekran boyutlarını almanız gerekir.
Display display = context.getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
int screen_height = outMetrics.heightPixels;
int screen_width = outMetrics.widthPixels;
Ekran boyutlarını aldıktan sonra, uygun kenar boşluklarını kullanarak görüntü görüntüleme genişliğini ve yüksekliğini ayarlayabilirsiniz.
view.getLayoutParams().height = screen_height - 140;
view.getLayoutParams().width = screen_width - 130 ;
ImageView ve Yüksekliği Programlı olarak ayarlamak için şunları yapabilirsiniz:
//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);
KOTLIN
val density = Resources.getSystem().displayMetrics.density
view.layoutParams.height = 20 * density.toInt()
Widget boyutunun programlı olarak ayarlanması gereken senaryoda aşağıdaki kuralları sağlayın.
LayoutParam
Bu görünümü eklediğiniz Düzen için ayarlayın . Benim durumuma ekliyorum bu TableRow
yüzden yapmak zorundaydımTableRow.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);
Görüntüyü yalnızca görüntü görünümüne sığdırmak istiyorsanız, height ve width özelliğinde ölçek türüyle "içeriği kaydır" seçeneğini kullanabilirsiniz, ancak manuel olarak ayarlamak istiyorsanız LayoutParams'ı kullanmanız gerekir.
Layoutparams, mizanpaj yüksekliğini ve genişliğini programlı olarak ayarlamak için etkilidir.
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);