Android 5.0 android: elevation Works for View, но не кнопка?

В образцах Android 5.0 из диспетчера SDK есть образец ElevationBasic . Он показывает два объекта View : круг и квадрат. Круг имеет android:elevation установлена ​​на 30dp :

       

На Nexus 9, запустив образец as-is, мы получим тень на круге:

ElevationBasic, как первоначально написано

Если мы изменим class виджетов на Button , оставив все остальные атрибуты as-is, мы потеряем тень на круге:

ElevationBasic, с помощью кнопки

Вопросы:

  1. Почему меняется android:elevation изменение android:elevation ? Это невозможно из-за фона, потому что в обоих случаях это тот же фон.

  2. Какие classы поддерживают android:elevation , а какие нет? Например, использование TextView вместо View или Button прежнему дает нам тень, поэтому это изменение в поведении не вводится на уровне TextView , а на уровне Button .

  3. Как видно из этого вопроса со вчерашнего дня, как мы получаем android:elevation нужно соблюдать на Button ? Есть ли какой-то android:allowElevationToWorkAsDocumented="true" значение, которое мы должны поставить в тему или что-то еще?

Стиль Button по умолчанию в Material имеет StateListAnimator, который управляет свойствами android:elevation and android:translationZ . Вы можете удалить существующий аниматор или установить свой собственный, используя свойство android:stateListAnimator .

   

Аниматор по умолчанию определяется в button_state_list_anim_material.xml . Вот пример, показывающий разрешенные и нажатые состояния:

                ...  

По моему опыту с Appcompat v7, запущенным на устройстве Lollipop, Button работает с функциями по умолчанию, такими как эффект пульсации, высота и z-анимация при щелчке, но пропускает их, если для персонализированного свойства android:background (как цвет или селектор) используется элемент xml.

Это связано с тем, что вы вручную устанавливаете фон кнопки, который заменит все его эффекты.

Начиная с версии 23.0.0 версии AppCompat , существует новый стиль Widget.AppCompat.Button.Colored, который использует цветную тему вашей темы colorbuttonNormal для отключенного цвета и colorAccent для включенного цвета.

   

Если вам нужны разные цвета, чем указано, вы можете создать новую тему и применить ее к кнопке через android:theme Затем вы можете использовать эту тему на всех ваших кнопках, где вы хотите получить такой же эффект.

У меня была аналогичная проблема, о которой я думал, был из-за неправильно раздутых макетов, но оказалось, что добавление clipToPadding сделало трюк. Это должно быть установлено в родительскую ViewGroup содержащую представление, которое вы хотите наложить на тень.

... android:clipToPadding="false" ...

Это решение работает для всех версий API Android

Создайте тень @android:drawable/dialog_holo_light_frame и если вы хотите настроить цвет фона вместо белого, создайте фон списка слоев с настраиваемым цветом поверх тени, как показано ниже.

Создайте отдельный файл для рисования white_background_shadow.xml

             

и используйте это для рисования в качестве фона, подобного этому

 android:background="@drawable/shadow" 
  • Возвышение на Android Lollipop не работает
  • Метод setMobileDataEnabled больше не может быть вызван как для Android L, так и позже
  • полностью прозрачная строка состояния и панель навигации на леденец
  • Цвет значков панели состояния Android
  • Как стилизовать DrawerArrowToggle из библиотеки Android appcompat v7 21
  • Как получить менеджер медиапроекции, не нарушая текущий процесс переднего плана, за исключением запроса разрешения?
  • Interesting Posts

    Не удается удалить папку в качестве администратора, запрашивает у администратора пользователя, которого не существует, – «вам нужно предоставить разрешение администратора для удаления этой папки»

    MongoDB – пейджинг

    Intellij IDEA не может разрешить символ с помощью платформы Play

    Сортировка коллекций (список , метод сравнения )

    Многопроходный туннель SSH

    Как создать нелинейную цветовую палитру / цветную панель?

    Загрузка ресурсов с помощью getClass (). GetResource ()

    Что такое «$$», используемое в PL / pgSQL

    Как предотвратить изменение текста текста Webkit во время перехода CSS

    Что такое кэширование дискового пространства Btrfs?

    Обновление значения свойства в файле свойств без удаления других значений

    Как управлять исключениями, сброшенными фильтрами весной?

    Старение глаз, размер экрана и разрешение

    Технология писать iPhone, BlackBerry и Android телефон одновременно?

    Как использовать jackson для десериализации массива объектов

    Давайте будем гением компьютера.