最佳答案
在 SDK Manager 的 Android 5.0示例中,有一个 ElevationBasic
示例。它显示了两个 View
对象: 一个圆和一个正方形。这个圆圈的 android:elevation
设置为 30dp
:
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/floating_shape"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginRight="40dp"
android:background="@drawable/shape"
android:elevation="30dp"
android:layout_gravity="center"/>
<View
android:id="@+id/floating_shape_2"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="25dp"
android:background="@drawable/shape2"
android:layout_gravity="center"/>
</FrameLayout>
在 Nexus9上,按原样运行样本,我们在圆上得到一个阴影:
如果我们将小部件类更改为 Button
,保留所有其他属性不变,我们就会丢失圆圈上的阴影:
问题是:
为什么 android:elevation
的行为会改变?它不能是由于背景,因为它是相同的背景在两种情况下。
哪些类支持 android:elevation
,哪些不支持?例如,使用 TextView
而不是 View
或 Button
仍然给我们带来阴影,所以这种行为上的改变不是在 TextView
级别上引入的,而是在 Button
级别上引入的。
从昨天的 这个问题中可以看到,我们如何让 android:elevation
在 Button
上获得荣誉?是否有一些 android:allowElevationToWorkAsDocumented="true"
值,我们必须放在一个主题或东西?