プログラムでImageViewの幅と高さを設定しますか?


643

ImageViewプログラムでの幅と高さを設定するにはどうすればよいですか?


4
奇妙なことに、この情報を見つけるのは非常に困難です。質問はより多くの賛成に値する。
phunehehe

14
別のプラットフォームから来るこれに苦労している人のための脚注。「フィット感に大きさや形状」オプションは、Androidに美しく処理されます。しかし、見つけるのは難しいです。通常は、幅に一致する親、高さをラップするコンテンツ、adjustViewBoundsをオン、スケールfitToCenter、cropToPadding falseにします。その後は自動です。私はそれが誰かを助けることを本当に望みます!
Fattie

回答:


1100

手遅れになるかもしれませんが、同じ問題を抱えている他の人のために、ImageViewの高さを設定します。

imageView.getLayoutParams().height = 20;

お役に立てれば。

重要。レイアウトが既に「レイアウト」された後に高さを設定する場合は、次も呼び出すようにしてください。

imageView.requestLayout();

102
レイアウトは既に「レイアウト」した後、あなたが高さを設定している場合は、()image_view.requestLayoutを呼び出すことを確認してください
リス・デイビス

9
wrap_contentが必要な場合はどうなりますか?
フランシスココラレスモラレス2014

8
1日あなたが私の上司だったと私はまだ:)ハキム君から学んでいるので、最大投票
サミEltamawy

9
@FranciscoCorralesMoralesは、wrap_contentにこれを使用しimage_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENTます。ビューの親がそれでLinearLayout置き換えられてRelativeLayoutいる場合
Sami Eltamawy

39
だから、どのように単位を指定するのですか?spではなくdpであると言う方法など
Saeed Neamati

231

画像ビューが動的である場合、getLayoutを含む回答はnull-exceptionで失敗します。

その場合、正しい方法は次のとおりです。

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

7
そのコードを置くと私の画像が消えます。どうして?ImageView imgLogo = new ImageView(this); imgLogo.setImageDrawable(logo); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(32,32); imgLogo.setLayoutParams(layoutParams); row.addView(imgLogo);
MustafaGüven、2012年

3
この答えをありがとう、私を正しい軌道に乗せてください。追加の注記として、LinearLayoutは画像の親ビュータイプに設定する必要があります。たとえば、画像ビューがギャラリーにある場合、LinearLayoutの代わりにGalleryレイアウトパラメーターを使用する必要があります。そうしないと、キャストの例外が発生します。
profexorgeek

3
@MustafaGüven私があなたと同じ問題を抱えていて、私のImageView姿が消えてしまった。トリックは、レイアウトパーツ(つまり、<this_part_here>.LayoutParams)を親の親と同じにすることImageViewです。したがって、たとえば、ImageView内のTableRow内にを配置した場合TableLayoutは、として持つ必要がありますTableRow.LayoutParams
user2323030 14

user($ some_number)について詳しく説明するには、親に従ってLayoutParams を作成し、子(imageView)に設定する必要があります。また、執筆時にrequestLayout()は必要ないようです
Bamboomy

新しいパラメーターを作成してください、悪い答え、現在のパラメーターを取得できます。つまり、それを実行する(新しいパラメーターを作成する)場合は、xmlも必要なく、プログラムでimageviewも作成/追加します...
user924

52

あなたの仕事をするこの簡単な方法:

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

十分にお使いください。


これは私のためのファインワークです!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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 、高さ); iv.setLayoutParams(parms);
Selim Raza

int他の場所で再利用されない場合、なぜ人々は変数を宣言するのですか?不必要に思えますが、私はそれについてあまり知りません。
n00dles

1
@ n00dlesをよりよく理解するために、他に何もない
duggu

36

これをとで遊んだことが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();

これがお役に立てば幸いです。


1
特定のdp値(つまり、pxからdpに変換しない)に対してこれをどのように実行しますか?
alxcyl 2016年

@Hirenドキュメントを読んだとき、getResources()。getDisplayMetrics()の意味は、DisplayMetricsのようです。簡単に説明してください。私はアンドロイドに感謝します、ありがとう。
Srini 2018年

java.lang.NullPointerExceptionが::nullのオブジェクト参照のフィールドへの書き込みを試みる「int型android.view.ViewGroup $ LayoutParams.height」によって引き起こされる
MDカリ

16

幅または高さをmatch_parent(親と同じ大きさ)またはwrap_content(独自の内部コンテンツに合わせるのに十分な大きさ)に設定する必要がある場合、次のViewGroup.LayoutParams2つの定数があります。

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

11

すべてのケースに値を設定できます。

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);

1
java.lang.NullPointerExceptionが::nullのオブジェクト参照のフィールドへの書き込みを試みる「int型android.view.ViewGroup $ LayoutParams.height」によって引き起こされる
MDカリ

8

ボタンを動的に設定する最も簡単な方法は、

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

したがって、たとえば、ボタンをTableLayout内のTableRow内に配置した場合は、TableRow.LayoutParamsのようにする必要があります。

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

8

LayoutParamsオブジェクトを作成し、それをimageViewに割り当てるだけです

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

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

3

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


1

ウィジェットのサイズをプログラムで設定する必要があるシナリオでは、以下のルールを確認してください。

  1. LayoutParam そのビューを追加するレイアウトに設定します。私の場合は追加しているTableRowので、TableRow.LayoutParams
  2. このコードに従ってください

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
私はこれが好き。使ってる!ありがとう。
n00dles

0

画像を画像ビューにぴったり合わせる場合は、scale-typeを使用してheightおよびwidthプロパティで「wrap content」を使用できますが、手動で設定する場合は、LayoutParamsを使用する必要があります。

Layoutparamsは、プログラムでレイアウトの高さと幅を設定するのに効率的です。


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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.