?android:attr/selectableItemBackground在暗背景下不够明显。

13

在安卓棒棒糖系统上,我正在使用:

android:background="?android:attr/selectableItemBackground"

当我点击按钮时,希望材料动画有所反应。

当按钮位于白色或浅色背景中(例如CardView)时,它可以正常工作。

但是当我想在深色背景上使用相同的效果时,我们几乎看不到它的效果,因为不够明显。

有人有什么想法吗?

谢谢


最简单的方法就是为整个深色背景容器设置主题。这就是我们处理 Light.DarkActionBar 的方式。你的目标 API 是什么? - alanv
谢谢。我的目标API是21(否则我将无法获得材料动画反馈),我有两个版本的按钮,一个用于API<21,另一个用于API21。您所说的设置深色背景容器的主题是什么意思? - Stéphane
1
在API 21+上,您可以在视图或视图组上设置android:theme="@android:style/ThemeOverlay.Material.Dark",以更改所有主题属性(文本颜色、涟漪颜色、按钮颜色等)为“暗”版本。如果您将其设置在视图组上,则该主题也会应用于视图膨胀期间的所有子元素。这是一种在否则“浅色”界面中拥有“深色”区域(或反之亦然)的简单方法。 - alanv
非常感谢,运行得非常完美! - Stéphane
...哦,还有一个额外的问题:您知道如何使这个背景拥有圆角吗? - Stéphane
你需要设置一个自定义的<ripple>可绘制对象。有很多相关的SO问题可以参考,或者你也可以查看RippleDrawable javadocs。 - alanv
3个回答

27

在API 21+上,您可以在ViewViewGroup上设置android:theme="@android:style/ThemeOverlay.Material.Dark",以将所有主题属性(文本颜色、涟漪颜色、按钮颜色等)更改为“暗”版本。如果您将其设置在ViewGroup上,则该主题也会应用于充气期间的所有子元素。这是在否则为“浅”接口中拥有“深色”区域的简便方法(反之亦然)。

<LinearLayout
    android:id="@id/my_dark_layout"
    ...
    android:theme="@android:style/ThemeOverlay.Material.Dark">

    <TextView
        android:id="@id/my_dark_bounded_ripple"
        ...
        android:background="?android:attr/selectableItemBackground"
        android:text="Bounded ripple" />

    <ImageButton
        android:id="@id/my_dark_unbounded_ripple"
        ...
        android:background="?android:attr/selectableItemBackgroundBorderless"
        android:src="@drawable/my_icon" />

</LinearLayout>

不知道为什么,如果imagebutton具有style =“@ style / Widget.AppCompat.Button.Borderless”android:background =“?selectableItemBackgroundBorderless”,它就无法正常工作。您知道原因吗? - deadfish
我觉得应用程序中的视图应该尊重清单文件中application标签中设置的theme属性,即使它们不是Activity的一部分(屏幕叠加)。但我猜这只是另一个Google的东西。 - TheWanderer

6

使用AppCompat的解决方案(也适用于旧API)

android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"
android:background="?attr/selectableItemBackground"

可以作为样式的一部分添加:<style name="AppTheme.Button.Borderless" parent="Widget.AppCompat.Button.Borderless"> <item name="android:theme">@style/Base.ThemeOverlay.AppCompat.Dark</item> <item name="android:background">?attr/selectableItemBackground</item> <item name="android:textColor">@color/textColorPrimary</item> <item name="android:minHeight">@dimen/button_height</item> <item name="android:textSize">@dimen/text_size_s</item> <item name="android:gravity">center_vertical|center_horizontal</item> </style> - Yaojin

0

改变应用程序主题的另一种方法是:

Theme.AppCompat.NoActionBar

对我来说它运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接