gpt4 book ai didi

Android 5.0 android :elevation Works for View, 但不是按钮?

转载 作者:IT老高 更新时间:2023-10-28 13:17:49 25 4
gpt4 key购买 nike

在 SDK 管理器的 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>

在 Nexus 9 上,按原样运行示例,我们会在圆圈上看到阴影:

ElevationBasic, As Originally Written

如果我们将小部件类更改为 Button,保留所有其他属性不变,我们将失去圆圈上的阴影:

ElevationBasic, Using a Button

问题:

  1. 为什么 android:elevation 的行为会发生变化?不可能是因为背景,因为这两种情况的背景是一样的。

  2. 哪些类支持android:elevation,哪些不支持?例如,使用 TextView 而不是 ViewButton 仍然会给我们阴影,因此在 TextView 级别,而是在 Button 级别。

  3. this question从昨天开始,我们如何让 android:elevationButton 上获得荣誉?是否有一些 android:allowElevationToWorkAsDocumented="true" 值我们必须放入主题或其他东西中?

最佳答案

Material 下的默认 Button 样式有 StateListAnimator控制 android:elevationandroid:translationZ 属性。您可以删除现有的动画师或使用 android:stateListAnimator 属性设置自己的动画师。

<Button
...
android:stateListAnimator="@null" />

<Button
...
android:stateListAnimator="@anim/my_animator" />

默认动画器在 button_state_list_anim_material.xml 中定义.这是一个显示启用和按下状态的示例:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:state_enabled="true">
<set>
<objectAnimator android:propertyName="translationZ"
android:duration="@integer/button_pressed_animation_duration"
android:valueTo="@dimen/button_pressed_z_material"
android:valueType="floatType"/>
<objectAnimator android:propertyName="elevation"
android:duration="0"
android:valueTo="@dimen/button_elevation_material"
android:valueType="floatType"/>
</set>
</item>
<!-- base state -->
<item android:state_enabled="true">
<set>
<objectAnimator android:propertyName="translationZ"
android:duration="@integer/button_pressed_animation_duration"
android:valueTo="0"
android:startDelay="@integer/button_pressed_animation_delay"
android:valueType="floatType"/>
<objectAnimator android:propertyName="elevation"
android:duration="0"
android:valueTo="@dimen/button_elevation_material"
android:valueType="floatType" />
</set>
</item>
...
</selector>

关于Android 5.0 android :elevation Works for View, 但不是按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27080338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com