具有自定义背景和“?attr/selectableItemBackground”的按钮

Button with custom background and "?attr/selectableItemBackground"

如何定义具有自定义背景和属性
Button "?attr/selectableItemBackground" ?

使用此代码,"?attr/selectableItemBackground" 属性将被忽略,它不会显示触摸反馈。

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:foreground="?attr/selectableItemBackground"/>

使用其他代码可以选择,但我失去了背景颜色:

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/selectableItemBackground"/>

尝试设置

android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"

示例主布局 activity:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    tools:context="com.example.petercarlim.myapplication.MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:background="@android:color/darker_gray"
        android:foreground="?android:attr/selectableItemBackground"/>

</LinearLayout>

或在您布局的父级(调用此布局的其他布局)中设置:

    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true" 

好的,你可以选择 parent

创建父对象并将 background 设置为白色,并使用 selectableItemBackground 作为子对象的背景。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/selectableItemBackground"/>

</LinearLayout>

你应该为它写一个特殊的drawable

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <selector>
            <item android:drawable="@drawable/your_drawable_rounded_enabled" android:state_enabled="true"/>
            <item android:drawable="@drawable/your_drawable_rounded_disabled" android:state_enabled="false"/>
        </selector>
    </item>
    <item android:drawable="?attr/selectableItemBackground"/>
</layer-list>