安卓中的“elevation”和“setElevation”不具有相同的效果

8

我注意到当我在xml中使用elevation属性并将其设置为4dp时,我会得到一个正常的阴影。但是当我在java中使用setElevation(4)时,我得到的阴影比xml属性少。我该怎么解决?

3个回答

14

Anton Kovalyov提供的答案几乎正确,但实际上正好相反。要获得正确的高度,您需要将dp转换为像素,并将其输入setElevation中,因此正确的答案如下:

setElevation(4 * context.getResources().getDisplayMetrics().density);

setElevation接受一个像素值。用户TinTran的评论是正确的。


0

这是因为Java使用像素,所以您必须将其转换为dp

您可以使用以下内容:

(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources().getDisplayMetrics())

欢迎来到 Stack Overflow!我已经编辑了您的问题,以便更易于阅读,请在下一次使用编辑器更好地格式化您的代码。 - Spoody

0
根据Android文档中的setElevation()方法:

设置此视图的基本高度,以像素为单位

你需要将像素转换为dpi:
setElevation(4 / context.getResources().getDisplayMetrics().density);

7
应该是4 * context.getResources().getDisplayMetrics().density吗? - Tin Tran
1
如果我们将px转换为dp,则使用/,否则使用* - https://dev59.com/MW445IYBdhLWcg3w_O8m#12147550 - Anton Kovalyov

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