Android elevation and setElevation not the same effect

6.8k views Asked by At

I noticed when I use elevation property in xml and set it to 4dp, I get a normal shadow. When I use setElevation(4) in java, I get less of a shadow than the xml property does. How can I fix that?

3

There are 3 answers

2
Anton Kovalyov On

According to android documentation setElevation()

Sets the base elevation of this view, in pixels.

You need to convert pixels to dpi:

setElevation(4 / context.getResources().getDisplayMetrics().density);
1
Zakarya Ali On

That is because java use pixel. so you have to convert it into dp

you can use this :

(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources().getDisplayMetrics())
0
Bernd Kampl On

The answer given by Anton Kovalyov is almost correct, but it is actually the other way around. To get the correct elevation you need to convert your dp to pixels and feed it into setElevation, so the correct answer looks like this:

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

setElevation takes a pixel value. User TinTran's comment is correct.