当前位置: 首页 > 知识库问答 >
问题:

Android按钮在Lollipop上波纹,在Lollipop前高亮显示

华季萌
2023-03-14

嗨,所以我有点困惑,想知道是否有人能给我指明正确的方向。

去使用Lollipop和Lollipop前的谷歌Play商店

您将在lollipop上看到,可选择视图具有涟漪效应。

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:id="@android:id/mask" android:drawable="@android:color/white"/>
    <item android:drawable="@color/colorAccentWith92PercentOpacity"/>
</ripple>

Android:background=“?attr/selectableitembackground”

来获得Lollipop前的高亮效果,但这覆盖了我的背景。我怎么能把这个设置在我当前的背景之上呢?

另外,我必须为我的应用程序中的每一种按钮创建一个可抽吸的涟漪(在抽吸-V21)吗?如何为回收器视图项执行此操作?

我不想为预Lollipop涟漪,我在问开发人员如何有效地使他们的按钮在Lollipop上做涟漪和高光效果在预Lollipop上

共有1个答案

韩弘方
2023-03-14

在主题中定义ColorControlHighlight,只要使用默认的appcompat-v7按钮,高亮颜色就可以使用。

这是一个例子,我如何后移材料按钮样式与一点交叉褪色动画和阴影,而不使用外部库。愿它在你的路上帮助你。

只要该按钮是白色文本覆盖在深色背景(@color/control_normal)上,并带有浅色高亮:

<style name="AppTheme" parent="Base.AppTheme">
    <item name="buttonStyle">@style/Widget.AppTheme.Button</item>
</style>
<!-- Some numbers pulled from material design. -->
<integer name="button_pressed_animation_duration">100</integer>
<integer name="button_pressed_animation_delay">100</integer>
<style name="Widget.AppTheme.Button" parent="Widget.AppCompat.Button">
    <!-- On Lollipop you can define theme via style. -->
    <item name="android:theme">@style/ThemeOverlay.AppTheme.Button</item>
</style>

<style name="ThemeOverlay.AppTheme.Button" parent="ThemeOverlay.AppCompat.Dark">
    <!-- The magic is done here. -->
    <item name="colorButtonNormal">@color/control_normal</item>
</style>

在Lollipop之前,它变得很棘手。

<style name="Widget.AppTheme.Button" parent="Widget.AppCompat.Button">
    <item name="android:background">@drawable/button_normal_background</item>
</style>

Thi是整个按钮的复合可拉拔。

<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="@dimen/abc_button_inset_horizontal_material"
    android:insetTop="@dimen/abc_button_inset_vertical_material"
    android:insetRight="@dimen/abc_button_inset_horizontal_material"
    android:insetBottom="@dimen/abc_button_inset_vertical_material">
    <layer-list>
        <!-- Shadow. -->
        <item
            android:drawable="@drawable/button_shadow"
            android:top="-0dp"
            android:bottom="-1dp"
            android:left="-0dp"
            android:right="-0dp"/>
        <item
            android:drawable="@drawable/button_shadow_pressable"
            android:top="-0dp"
            android:bottom="-3dp"
            android:left="-1dp"
            android:right="-1dp"/>
        <!-- Background. -->
        <item android:drawable="@drawable/button_shape_normal"/>
        <!-- Highlight. -->
        <item>
            <selector
                android:enterFadeDuration="@integer/button_pressed_animation_duration"
                android:exitFadeDuration="@integer/button_pressed_animation_duration">

                <item
                    android:drawable="@drawable/button_shape_highlight"
                    android:state_focused="true"
                    android:state_enabled="true"/>
                <item
                    android:drawable="@drawable/button_shape_highlight"
                    android:state_pressed="true"
                    android:state_enabled="true"/>
                <item
                    android:drawable="@drawable/button_shape_highlight"
                    android:state_selected="true"
                    android:state_enabled="true"/>
                <item android:drawable="@android:color/transparent"/>
            </selector>
        </item>
        <!-- Inner padding. -->
        <item android:drawable="@drawable/button_padding"/>
    </layer-list>
</inset>

这是未按下时的阴影。

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:bottomLeftRadius="3dp"
        android:bottomRightRadius="3dp"
        android:topLeftRadius="2dp"
        android:topRightRadius="2dp"/>
  <solid android:color="#2000"/>
</shape>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="UnusedAttribute"
    android:enterFadeDuration="@integer/button_pressed_animation_duration"
    android:exitFadeDuration="@integer/button_pressed_animation_duration">
    <item
        android:state_pressed="true"
        android:state_enabled="true">
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <corners
                android:bottomLeftRadius="5dp"
                android:bottomRightRadius="5dp"
                android:topLeftRadius="3dp"
                android:topRightRadius="3dp"/>
            <solid android:color="#20000000"/>
        </shape>
    </item>
    <item android:drawable="@android:color/transparent"/>
</selector>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="@dimen/abc_control_corner_material"/>
    <solid android:color="@color/control_normal"/>
</shape>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/transparent"/>
    <padding
        android:left="@dimen/abc_button_padding_horizontal_material"
        android:top="@dimen/abc_button_padding_vertical_material"
        android:right="@dimen/abc_button_padding_horizontal_material"
        android:bottom="@dimen/abc_button_padding_vertical_material"/>
</shape>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="@dimen/abc_control_corner_material"/>
    <solid android:color="@color/control_highlight"/>
</shape>
    null
 类似资料:
  • 如何实现谷歌材料设计指南中描述的“凸起按钮”和“扁平按钮”? 凸起的按钮为大多数平面布局增加了维度。他们强调 在工具栏和对话框中使用平面按钮,以避免过度分层。 资料来源:http://www.google.com/design/spec/components/buttons.html

  • 我在这里检查了一大堆答案,仍然没有骰子。Android Studio预览显示阴影,但没有显示5.1.1 Nexus 7。 这是我的XML 所以我使用了cardUseCompatPadding(也在这里),检查了文档,确保卡片有边距。。。。没有骰子。 我在https://gist.github.com/tigerhawkvok/0ca3d1f402afa29642d5发布了整个XML文件。 帮助

  • 我在我的应用程序中使用了Android设计库的浮动动作按钮,它在Lollipop和以上版本上工作良好,但在Lollipop之前的版本(4.0-4.2.2)上崩溃了。我真的卡住了,弄不清这个问题。 错误:

  • 我使用矢量绘图在Android之前Lollipop和这些是我的一些库和工具版本: Android Studio: 2.0 AndroidGradle插件 构建工具:23.0.2 Android支持库:23.3.0 我在我的应用级别 还值得一提的是,我使用一个额外的绘图,如LayerDrawable(layer_list),如Android官方博客中所述(链接此处),用于为 你会发现直接引用应用程序

  • 看起来在Android 4.0和Lollipop上不起作用。正如您在下图中看到的,在Android Lollipopo上缺少阴影,而在Android 4.1.1上它是方形的:/ 有人面临这个问题吗? 库版本:

  • 我有一个带有Android21的Nexus5设备。我正在测试我的项目在它上没有问题。但是,如果我在一个带有Google API 19的模拟器上进行测试,它会显示错误。如果它在Lollipop上运行良好,怎么会出现这个错误呢?我甚至用索尼4.4设备问我的朋友,他的手机也会崩溃。我将编译SDK版本设置为21版,将构建工具设置为21.1.2版。我尝试了gradle clean,我正在Android St