Возвышение на Android Lollipop не работает
Я пытаюсь использовать свойство elevation в последнем выпуске предварительного просмотра Android Lollipop. Я установил targetSdk в 21 и тему в Material. Затем я добавил фоновое изображение в TextView и установил высоту в 8dp, но TextView не показывает никаких признаков тени. То есть на Nexus7 работает предварительный просмотр Lollipop. Есть ли что-то еще, что я должен рассмотреть?
Вот макет:
Это фоновая возможность:
- INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE
- Метод setMobileDataEnabled больше не может быть вызван как для Android L, так и позже
- Android SystemII глючит в Lollipop
- Android 5.0 android: elevation Works for View, но не кнопка?
- getRunningTasks не работает в Android L
Вот TextView:
- Влияние материала на кнопку с цветом фона
- Альтернатива getRunningTasks в Android L
- Эта активность уже имеет панель действий, предоставляемую декором windows
- Панель инструментов lollipop для Android: как скрыть / показать панель инструментов при прокрутке?
- Значок панели уведомлений становится белым в Android 5 Lollipop
- Цвет значков панели состояния Android
- полностью прозрачная строка состояния и панель навигации на леденец
- Как получить менеджер медиапроекции, не нарушая текущий процесс переднего плана, за исключением запроса разрешения?
По какой-то причине, если вы устанавливаете сплошной цвет с прозрачностью, тень высоты не появляется.
В вашем примере я изменил # 7d0073ff на # 0073ff, и у меня появилась тень.
Вероятно, это ошибка, так как в их документации он дает аналогичный пример, используя полупрозрачный цвет фона.
Перейдя через документы, я наконец нашел решение.
Просто добавьте card_view:cardUseCompatPadding="true"
в свой CardView
и тени появятся на устройствах Lollipop.
Что происходит, область содержимого в CardView
имеет разные размеры на устройствах с предварительной лепкой и леденец. Таким образом, в устройствах с леденец тень на самом деле покрыта картой, поэтому ее не видно. Добавляя этот атрибут, область содержимого остается неизменной для всех устройств, и тень становится видимой.
Мой xml-код выглядит так:
...
ДОБАВЛЕНИЕ андроида: высота тени для ImageView:
android:clipToPadding="false" + android:outlineProvider="bounds" + android:elevation="2dp"
У меня также была эта проблема, и, как оказалось, вам нужно включить аппаратное ускорение в манифесте android
TL; DR
Проверьте свою карточку: (или любое другое слово, которое вы используете), и убедитесь, что она соответствует этому: xmlns: card = “http://schemas.android.com/apk/res-auto”
Я знаю, что здесь есть несколько ответов, но я хотел добавить мой, поскольку он не был включен в эти текущие предложения. Чтобы получить тени, работающие как на KitKat, так и на Marshmallow (только эмуляторы, которые я пробовал, я уверен, что они работают между ними), я добавил следующие атрибуты xml на свою карточку:
card:cardElevation="25dp" card:cardUseCompatPadding="true"
После того, как я ударил головой о стол, почему это не работает, пытаясь установить цвет фона карты на что-то совершенно непрозрачное, включив аппаратное ускорение в манифесте и даже помолившись, я проверил объявления пространства имен в моем файле. К моему ужасу, я увидел, что пространство имен xml для карты было присвоено следующему:
xmlns:card="http://schemas.android.com/tools"
После исправления этой декларации пространства имен я снова запустил свое фиктивное приложение и облегченно вздохнул, когда тени наконец-то показали, как ожидалось.
Вот доказательство, если вы сомневаетесь, как я. И, пожалуйста, Google, Android, кто бы то ни было: снова создайте тени. Они не должны быть такими трудными.
Вот весь файл, который создал макет, изображенный ниже:
Да, я знаю. Досадно, что вы не можете просто скопировать и вставить этот макет и запустить его, потому что в нем есть PercentRelativeLayout, но я оставил его там специально. Вы обязательно должны это проверить . Супер мощный, очень полезный. Приятно приятно. Надеюсь, это помогло.
если у вас есть следующая строка в манифесте, тогда тени не будут отображаться:
андроид: hardwareAccelerated = “ложь”
Как отмечалось ранее, это открытая ошибка в Android: если фоновый ресурс использует сплошной цвет с прозрачностью, тень не будет отображаться.
Чтобы обойти эту проблему, отобразите фон в отдельном виде и установите альфа в этом представлении. Оберните фоновое изображение и TextView
в RelativeLayout
чтобы поместить фон непосредственно в TextView
и использовать android:layout_alignLeft
, android:layout_alignBottom
т. Д., Чтобы сделать его того же размера. Они должны быть на одном уровне, и фон должен появиться перед TextView
в xml, чтобы он рисовался под ним.
Выбираемый те же, что и ваш, но без прозрачности:
Результат:
Несколько заметных точек:
- Вы должны убедиться, что прилагаемый
RelativeLayout
достаточно велик, чтобы отобразить тень. Если вы просто установите его размеры вwrap_content
без заполнения, тень будетwrap_content
кwrap_content
макета. Как объясняется в этом вопросе , вы можете использовать padding и setandroid:cipToPadding="false"
чтобы сделать его достаточно большим для тени. В этом случае вам может не понадобиться столько отступов, я не экспериментировал с этим. - В этом случае нам нужно использовать отдельный вид для фона, потому что, если бы мы установили
alpha
непосредственно вTextView
тогда текст также был бы затронут. В зависимости от вашего варианта использования вам может не понадобиться отдельный вид и охватывающий макет, и он просто может иметь только один вид, сalpha
настройкой на вид и без прозрачности в drawable.
Попробуйте использовать: app: cardElevation = “4dp”