我有一个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);
答案 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);