在安卓中,我们如何为ImageView设置高度和宽度的dp值?

30
我想在Android中以dp的形式编程设置ImageView的高度和宽度。我该如何实现?

请尝试以下链接:https://dev59.com/Hm435IYBdhLWcg3wuign,http://androidactivity.wordpress.com/2011/10/04/use-dip-sp-metrics-programmatically/ - Janmejoy
你接受这个作为答案! - Atef Hares
7个回答

73

使用 dp 设置宽度和高度:

imageview.getLayoutParams().height = (int) getResources().getDimension(R.dimen.imageview_height);
imageview.getLayoutParams().width = (int) getResources().getDimension(R.dimen.imageview_width);

在你的dimens.xml文件中提供键的值:

<dimen name="imageview_width">50dp</dimen> 
<dimen name="imageview_height">50dp</dimen> 

谢谢Andros,但是我在尝试实现时遇到了不兼容类型错误,我该如何解决它或者我漏掉了什么吗? - Karthik
很棒的回答,伙计。 - Darlan Dieterich

29
使用显示度量标准获取比例因子,然后进行简单的数学计算 - 例如,如果我想要200x150dp:
final float scale = getResources().getDisplayMetrics().density;
int dpWidthInPx  = (int) (200 * scale);
int dpHeightInPx = (int) (150 * scale);

然后设置图片视图大小:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(dpWidthInPx, dpHeightInPx);
imageView.setLayoutParams(layoutParams);

6
这可能更简单,也应该能解决问题:
ImageView im = (ImageView)findViewById(R.id.image1);
LayoutParams params = im.getLayoutParams();
params.height = getActivity().getResources().getDimensionPixelSize(R.dimen.item_height);
params.width = getActivity().getResources().getDimensionPixelSize(R.dimen.item_width);

在你的dimens.xml文件中。
<dimen name="item_height">80dp</dimen> 
<dimen name="item_width">80dp</dimen> 

为什么你说“更简单”?我没有看到任何整洁或简单之处... - doctorram

1
这可能会帮助您...
ImageView im = (ImageView)findViewById(R.id.image1);
LayoutParams params = im.getLayoutParams();
params.height = 100;
params.width = 100;

DisplayMetrics metrics = getWindowManager().getDefaultDisplay().getMetrics(metrics); float logicalDensity = metrics.density; int px = (int) (dp * logicalDensity + 0.5); 这可能有助于您将像素转换为 dp。 - lalith
Lalith做的0.5是否对所有设备都是一个共同因素,还是会有所不同? - Karthik
如果满足您的问题,请选择此答案为正确答案。 - lalith

1
  1. 首先选择一个合适的dip并将其分配给一个变量。

int dipAmount=350;

  1. 然后读取您的ImageView的高度。

float scale = imageview.Resource.DisplayMetrics.Density;

  1. 从px转换为dip。

int converter =(int) (350 * scale + 0.5f);

  1. 将高度设置为imageview。

imageView.LayoutParameters.Height=converter;


1
 final float scale = getContext().getResources().getDisplayMetrics().density;
int height_ = (int) (250 * scale + 0.5f);
int width_ = (int) (250 * scale + 0.5f);

250是以dp为单位的

ViewGroup.LayoutParams params = ImageView.getLayoutParams();
params.height = height_;
params.width = width_;

ImageView.setLayoutParams(params);

-2

试试这个:

image_view.getLayoutParams().height = 20;
image_view.getLayoutParams().width= 20;

如果可以的话,请给我你的反馈。这对我来说是有效的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接