如何仅在一侧创建具有笔划的按钮,以便在按下按钮时颜色发生变化

时间:2014-08-16 07:38:24

标签: android xml button stroke

我想在按钮顶部创建一个黑色笔触按钮。 stackoverflow上有许多类似的问题,但我还想要一件事 - 按下时按钮的颜色应该改变。 我无法使用带有herehere答案的选择器。什么应该是我的按钮背景的xml代码(android:背景)? 在此先感谢:)

我目前的代码,所有方面都有一个统一的击球

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

2 个答案:

答案 0 :(得分:3)

您可以使用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>

和第二个按下状态的相同代码,颜色不同(只需将@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>

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

android:background="@drawable/button_bg"

答案 1 :(得分:0)

我在最后遵守这对我有用:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"><layer-list>
            <item android:bottom="-10dp" android:left="-10dp" android:right="-10dp"><shape>
                    <gradient android:angle="270" android:endColor="#a0e0b071" android:startColor="#a0a67637" />

                    <stroke android:width="10dp" android:color="#5c3708" />

                    <corners android:radius="5dp" />

                    <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
                </shape></item>
        </layer-list></item>
    <item android:state_enabled="true"><layer-list>
            <item android:bottom="-10dp" android:left="-10dp" android:right="-10dp"><shape android:shape="rectangle">
                    <gradient android:angle="270" android:endColor="#a0a67637" android:startColor="#a0e0b071" />

                    <stroke android:width="10dp" android:color="#5c3708" />

                    <corners android:radius="5dp" />

                    <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
                </shape></item>
        </layer-list></item>

</selector>