Android возвышение и setElevation не тот же эффект
Я заметил, что когда я использую свойство высоты в xml и устанавливаю 4dp, я получаю нормальную тень. Когда я использую setElevation(4) в Java, я получаю меньше тени, чем свойство xml. Как я могу это исправить?
3 ответа
Ответ Антона Ковалева почти правильный, но на самом деле все наоборот. Чтобы получить правильную высоту, вам нужно конвертировать ваш dp в пиксели и передать его в setElevation
так что правильный ответ выглядит так:
setElevation(4 * context.getResources().getDisplayMetrics().density);
setElevation
принимает значение пикселя. Комментарий пользователя TinTran является верным.
Согласно документации для Android setElevation()
Устанавливает базовую высоту этого вида в пикселях.
Вам нужно конвертировать пиксели в dpi:
setElevation(4 / context.getResources().getDisplayMetrics().density);
Это потому, что Java использует пиксель. так что вы должны конвертировать его в дп
Вы можете использовать это:
(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources().getDisplayMetrics())