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())
Другие вопросы по тегам