Возвышение на Android Lollipop не работает

Я пытаюсь использовать свойство elevation в последнем выпуске предварительного просмотра Android Lollipop. Я установил targetSdk в 21 и тему в Material. Затем я добавил фоновое изображение в TextView и установил высоту в 8dp, но TextView не показывает никаких признаков тени. То есть на Nexus7 работает предварительный просмотр Lollipop. Есть ли что-то еще, что я должен рассмотреть?

Вот макет:

    

Это фоновая возможность:

      

Вот TextView:

Высота 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 и set android:cipToPadding="false" чтобы сделать его достаточно большим для тени. В этом случае вам может не понадобиться столько отступов, я не экспериментировал с этим.
  • В этом случае нам нужно использовать отдельный вид для фона, потому что, если бы мы установили alpha непосредственно в TextView тогда текст также был бы затронут. В зависимости от вашего варианта использования вам может не понадобиться отдельный вид и охватывающий макет, и он просто может иметь только один вид, с alpha настройкой на вид и без прозрачности в drawable.

Попробуйте использовать: app: cardElevation = “4dp”

  • Уведомление о Heads-Up - Android Lollipop
  • Как стилизовать DrawerArrowToggle из библиотеки Android appcompat v7 21
  • Как получить имя getTopActivity или получить в настоящее время имя пакета приложения в lollipop?
  • Ошибка Android-L
  • getRunningTasks не работает в Android L
  • INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE
  • Давайте будем гением компьютера.