8

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?

qwertz
  • 6,206
  • 9
  • 40
  • 62

3 Answers3

14

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.

Community
  • 1
  • 1
Bernd Kampl
  • 4,837
  • 4
  • 21
  • 26
0

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);
Anton Kovalyov
  • 932
  • 4
  • 13
0

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())
Spoody
  • 2,852
  • 1
  • 26
  • 36
  • Welcome to Stack Overflow! I've edited your question to make it readable, please use the editor to better format your code in the next time. – Spoody May 01 '18 at 15:44