Java 是否以编程方式设置图像视图的宽度和高度?

Java 是否以编程方式设置图像视图的宽度和高度?,java,android,android-emulator,android-widget,Java,Android,Android Emulator,Android Widget,如何以编程方式设置图像视图的宽度和高度?现在设置图像视图的高度可能为时已晚,但为了其他有同样问题的人着想: imageView.getLayoutParams().height = 20; 重要。如果要在布局已“布局”后设置高度,请确保同时调用: imageView.requestLayout(); 如果您的图像视图是动态的,则包含getLayout的答案将失败,并出现null异常 在这种情况下,正确的方法是: LinearLayout.LayoutParams layoutParams =

如何以编程方式设置
图像视图的宽度和高度?

现在设置
图像视图的高度可能为时已晚,但为了其他有同样问题的人着想:

imageView.getLayoutParams().height = 20;

重要。如果要在布局已“布局”后设置高度,请确保同时调用:

imageView.requestLayout();

如果您的图像视图是动态的,则包含getLayout的答案将失败,并出现null异常

在这种情况下,正确的方法是:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(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);
希望对你使用充分

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;
获得屏幕尺寸后,可以使用适当的边距设置imageview宽度和高度

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

动态设置按钮的最佳和最简单的方法是

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

如果需要将宽度或高度设置为
match_parent
(与其父级一样大)或
wrap_content
(足够大以适合其内部内容),则有以下两个常量:

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那样设置它们:


只需创建一个LayoutParams对象并将其分配给imageView即可

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

我用
pixel
dp
播放了这首歌

private int dimensionInPixel = 200;
如何通过像素设置:

view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();
int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();
如何通过dp设置:

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

希望这对您有所帮助。

您可以为所有情况设置值

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);

在需要以编程方式设置小部件大小的场景中,请确保遵循以下规则

  • 为要添加该视图的布局设置
    LayoutParam
    。在我的例子中,我将添加到
    TableRow
    ,因此我必须执行
    TableRow.LayoutParams
  • 请遵循此代码
  • final float scale=getResources().getDisplayMetrics().density;
    int dpWidthInPx=(int)(17*刻度);
    int dpHeightInPx=(int)(17*刻度)

    TableRow.LayoutParams deletelayoutParams=新建TableRow.LayoutParams(dpWidthInPx,dpHeightInPx);
    按钮。setLayoutParams(deletelayoutParams);
    
    tableRow.addView(按钮,1)

    如果您只想在图像视图中匹配图像,可以使用“高度和宽度”属性中的“包裹内容”和缩放类型,但如果您想手动设置,则必须使用LayoutParams


    Layoutparams对于以编程方式设置布局高度和宽度非常有效

    要以编程方式设置图像视图和高度,您可以

                //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()
    
    setLayoutParams(新的ViewGroup.LayoutParams(宽度、高度))

    例如:

    image.setLayoutParams(new ViewGroup.LayoutParams(150, 150));
    

    如果我把代码放进去,我的图像就会消失。为什么?ImageView imgLogo=新的ImageView(本);imgLogo.setImageDrawable(徽标);LinearLayout.LayoutParams LayoutParams=新的LinearLayout.LayoutParams(32,32);imgLogo.setLayoutParams(layoutParams);row.addView(imgLogo);谢谢你的回答,让我走上正轨。作为补充说明,LinearLayout应设置为图像的父视图类型。例如,如果您的图像视图位于图库中,则应使用图库布局参数而不是线性布局,否则将出现强制转换异常。@MustafaGüven我和您有相同的问题,其中我的
    ImageView
    消失。诀窍是使布局部分(即,
    .LayoutParams
    )与
    ImageView
    的父级相同。因此,例如,如果您将
    ImageView
    放在
    TableRow
    中的
    TableLayout
    中,则应将其作为
    TableRow.LayoutParams
    。要详细说明用户($some_number)->您需要根据父级创建LayoutParams,并在子级(ImageView)上设置它们,还需要requestLayout()在编写时似乎没有必要。如果您创建了新参数,回答不好,您只需获取当前参数,我的意思是,如果您这样做(创建新参数),那么您甚至不需要xml,然后还可以通过编程方式创建/添加imageview…如果您在布局“布局”后设置高度,确保调用image\u view.requestLayout(),如果我需要wrap\u内容怎么办?@FranciscoCorralesMorales将其用于wrap\u内容
    image\u视图。getLayoutParams().height=RelativeLayout.LayoutParams.wrap\u内容
    。。如果视图父视图是
    LinearLayout
    用itSo替换
    RelativeLayout
    ,如何指定单位?如何说它是dp,不是sp,等等@Saeednamati,它是px。为了将dp转换为px,请使用方法,例如,在脚注中为来自另一个平台的任何人提供方法。“尺寸和形状适合”选项在Android中处理得非常漂亮;但是很难找到。您通常希望宽度匹配父项、高度包裹内容、启用adjustViewBounds、缩放fitToCenter和CroptopPadding false。那么它是自动的。我真的希望它能帮助别人!对于特定的dp值(即不从px转换为dp),我将如何执行此操作?@Hiren getResources()的含义是什么。getDisplayMetrics()当我阅读文档时,它似乎是DisplayMetrics。你能简单地给我解释一下吗。我是android新手,谢谢。原因:java.lang.NullPointerException:尝试写入空对象引用上的字段“int-android.view.ViewGroup$LayoutParams.height”导致:java.lang.NullPointerException:尝试写入空对象引用上的字段“int-android.view.ViewGroup$LayoutParams.height”。这对我来说很好!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Display Display=getWindowManager().getDefaultDisplay();ImageView iv=
    image.setLayoutParams(new ViewGroup.LayoutParams(150, 150));