根据分辨率以编程方式设置ImageView大小

时间:2014-07-09 12:09:06

标签: android imageview screen-resolution layoutparams

我有一个ImageView,我想设置以编程方式的大小。因此,我无法选择将不同大小的图片放入各自的drawable文件夹中。

基本上,我没有按照以下所做的操作,而是根据屏幕分辨率设置LayoutParams。如果设备为ldpimdpi,则为100,100 ...如果是hdpi,则为150,150等。如何实现此目标?

ImageVIew imageView = new ImageView(this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(100, 100));
layout.add(imageView);

6 个答案:

答案 0 :(得分:4)

您可以使用

ImageVIew imageView = new ImageView(this);
int size = getImageSize();
imageView.setLayoutParams(new ViewGroup.LayoutParams(size , size ));
layout.add(imageView);

,您的getImageSize功能将

private int getImageSize(){
         int density= getResources().getDisplayMetrics().densityDpi;
         int size =100; 
         switch(density)
         {
         case DisplayMetrics.DENSITY_LOW:
             size = 100;
             break;
         case DisplayMetrics.DENSITY_MEDIUM:
             size = 100;
             break;
         case DisplayMetrics.DENSITY_HIGH:
             size = 150;
             break;
         }

         return size;
       } 

其中getImageSize根据不同的密度返回不同的大小。

答案 1 :(得分:1)

首先获取screen width,然后将其与您想要的相乘。我乘以0,2

DisplayMetrics displaymetrics = new DisplayMetrics();
                   getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
                   int screen_width = displaymetrics.widthPixels;
                   int icon_width = screen_width * 2 / 10;

然后

ImageVIew imageView = new ImageView(this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(icon_width, icon_width));
layout.add(imageView);

答案 2 :(得分:1)

一旦我用过这个:

 int density= getResources().getDisplayMetrics().densityDpi;

switch(density)
{
case DisplayMetrics.DENSITY_LOW:
Toast.makeText(context, "LDPI", Toast.LENGTH_SHORT).show();
break;
case DisplayMetrics.DENSITY_MEDIUM:
 Toast.makeText(context, "MDPI", Toast.LENGTH_SHORT).show();
break;
case DisplayMetrics.DENSITY_HIGH:
Toast.makeText(context, "HDPI", Toast.LENGTH_SHORT).show();
break;
case DisplayMetrics.DENSITY_XHIGH:
 Toast.makeText(context, "XHDPI", Toast.LENGTH_SHORT).show();
break;

}

答案 3 :(得分:1)

使用DisplayMetrics获取设备dpi值(以像素为单位)

DisplayMetrics dm = new DisplayMetrics();

getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);

// Display device dpi value of Y in pixels
int screenDPIy = (int)dm.ydpi;

if (screenDPIy <= 180) 
{           
    ImageVIew imageView = new ImageView(this);
    imageView.setLayoutParams(new ViewGroup.LayoutParams(100, 100));
    layout.add(imageView);
}
else
{
    ImageVIew imageView = new ImageView(this);
    imageView.setLayoutParams(new ViewGroup.LayoutParams(150, 150));
    layout.add(imageView);

}

答案 4 :(得分:1)

要了解设备具有哪种密度,您可以使用:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch(metrics.densityDpi){
     case DisplayMetrics.DENSITY_LOW:
                break;
     case DisplayMetrics.DENSITY_MEDIUM:
                 break;
     case DisplayMetrics.DENSITY_HIGH:
                 break;
}

答案 5 :(得分:0)

使用与密度无关的像素。以编程方式使用此处的策略:Converting pixels to dp

ImageView imageView = new ImageView(this);
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
int height= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
imageView.setLayoutParams(new ViewGroup.LayoutParams(width, height));
layout.add(imageView);
相关问题