【问题标题】:Setting ImageView size programmatically depending on resolution根据分辨率以编程方式设置 ImageView 大小
【发布时间】:2014-07-09 20:17:02
【问题描述】:
我有一个ImageView,我想以编程方式设置它的大小。所以我没有选择将不同大小的图像放在各自的drawable文件夹中。
基本上,我想根据屏幕分辨率设置LayoutParams,而不是我在下面所做的事情。如果设备是ldpi或mdpi,则100,100...如果是hdpi,则150,150等。我该如何实现?
ImageVIew imageView = new ImageView(this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(100, 100));
layout.add(imageView);
【问题讨论】:
标签:
android
imageview
screen-resolution
layoutparams
【解决方案1】:
你可以使用
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根据不同的密度返回不同的大小。
【解决方案2】:
首先得到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);
【解决方案3】:
一旦我用过这个:
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;
}
【解决方案4】:
使用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);
}
【解决方案5】:
要了解设备的密度,您可以使用:
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;
}
【解决方案6】:
使用与密度无关的像素。使用此处的策略以编程方式工作: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);