如何创建一个只有一侧有笔触的按钮,以便按下按钮时颜色会发生变化

ish*_*sht 1 xml android button stroke

我只想在按钮的顶部创建一个带有黑色笔触的按钮。stackoverflow 上有很多类似的问题,但我还想要一件事——按下按钮时按钮的颜色应该改变。我无法将选择器与此处此处给出的答案一起使用。我的按钮背景的 xml 代码应该是什么(android:background)?提前致谢 :)

我目前的代码在所有方面都有统一的笔画

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
    <shape>
        <solid
            android:color="@color/dark_red" />
        <stroke
            android:width="0.1dp"
            android:color="#fff" />
        <corners
            android:radius="0dp" />

    </shape>
</item>
<item>
    <shape>
        <gradient
            android:startColor="@color/red"
            android:endColor="@color/dark_red"
            android:angle="270" />
        <stroke
            android:width="0.1dp"
            android:color="#fff" />
        <corners
            android:radius="0dp" />

    </shape>
</item>
Run Code Online (Sandbox Code Playgroud)

Sta*_*lav 5

您可以layer-list用于绘制您需要的困难背景。

您必须为选择器添加两个背景状态

unpressed_state.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/black" />
        </shape>
    </item>
    <item
        android:top="5dp">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white" />
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

以及具有不同颜色的第二个按下状态的相同代码(只需更改@android:color/black为您需要的)。这将是prssed_state.xml

并且,在创建您自己的背景选择器之后您需要的所有东西 button_bg.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/pressed_state" android:state_pressed="true" />
    <item android:drawable="@drawable/unpressed_state" />
</selector>
Run Code Online (Sandbox Code Playgroud)

现在只需将 button_bg 放在android:background按钮的属性中:

android:background="@drawable/button_bg"
Run Code Online (Sandbox Code Playgroud)