gpt4 book ai didi

Lollipop 上的 Android Button Ripple 并在 pre lollipop 上突出显示

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:39 27 4
gpt4 key购买 nike

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

在 Lollipop 和 pre-lollipop 上使用 Google Play 商店

您会在 Lollipop 上看到可选择的 View 具有涟漪效应。

在 pre-lollipo 上,您会得到这种高光效果。

这是怎么做到的?

目前在我的应用程序中,我有一个包含此选择器的 drawable-v21 目录

它基本上在我的背景上产生涟漪

<?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"

为了在 pre-lollipop 上获得高亮效果,但这会覆盖我的背景。我怎样才能将它设置在我当前的背景之上?

我还必须为我的应用程序中的每种按钮创建一个波纹可绘制对象(在 drawble-v21 中)吗?我将如何为回收商查看项目执行此操作?

是什么让这个问题与众不同

我不希望 pre-lollipop 产生涟漪 我想问的是开发者如何有效地让他们的按钮在 lollipop 上产生涟漪并在 pre-lollipop 上产生高光效果

最佳答案

选项1

在您的主题中定义 colorControlHighlight,只要您使用默认的 appcompat-v7 按钮,高亮颜色就应该开箱即用。

选项 2

这是一个示例,说明我如何在不使用外部库的情况下向后移植 Material 按钮样式和一些淡入淡出动画和阴影。愿它对您有所帮助。

如果按钮是深色背景上的白色文本 (@color/control_normal),并带有浅色高亮显示:

值/主题.xml

这里我将覆盖整个主题的默认按钮样式:

<style name="AppTheme" parent="Base.AppTheme">
<item name="buttonStyle">@style/Widget.AppTheme.Button</item>
</style>

值/整数.xml

<!-- Some numbers pulled from material design. -->
<integer name="button_pressed_animation_duration">100</integer>
<integer name="button_pressed_animation_delay">100</integer>

values-v21/styles.xml

Lollipop 的按钮样式,它理解主题叠加并默认使用波纹。让我们用适当的颜料为波纹着色:

<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>

值/styles.xml

在 Lollipop 之前它变得棘手。

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

drawable/button_normal_background.xml

这是整个按钮的复合绘图。

<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>

drawable/button_shadow.xml

这是未按下时的阴影。

<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>

drawable/button_shadow_pressable.xml

这是在按下状态下的扩展阴影。结果效果 近看时看起来很粗糙,但从远处看已经足够好了。

<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>

drawable/button_shape_normal.xml

这是主要的按钮形状。

<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>

drawable/button_padding.xml

只是额外的填充以与 Material 按钮完全一致。

<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>

drawable/button_shape_highlight.xml

这是在普通按钮形状上绘制的高亮按钮形状。

<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>

@color/control_highlight可以指向

  • @color/ripple_material_dark - 半透明白色,在深色背景上使用
  • @color/ripple_material_light - 半透明黑色,在浅色背景上使用
  • 您定义的任何其他颜色。

关于Lollipop 上的 Android Button Ripple 并在 pre lollipop 上突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32587249/

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