0

我正在尝试<shape>用于显示按钮的按下状态。为此,我在正常状态下使用透明颜色的笔触,在按下状态下使用颜色:

按钮.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/button_normal"/>
</selector>

button_pressed.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#0F0" />
    <stroke android:width="@dimen/size_medium" android:color="#F00" />

    <padding android:left="@dimen/size_medium" android:top="@dimen/size_medium" android:right="@dimen/size_medium"
        android:bottom="@dimen/size_medium" />
</shape>

button_normal.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00F" />
    <stroke android:width="@dimen/size_medium" android:color="#0000" />
</shape>

这是在我的测试布局中:

<Button
    android:id="@+id/button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/action_sign_in"
    android:textStyle="bold"
    android:layout_marginTop="16dp"
    android:background="@drawable/button"
    android:textColor="#ffffff"
    android:textAlignment="viewStart"
    android:textAppearance="@null"
    android:textSize="15sp"
    android:enabled="true"/>

这就是它的样子半程

ps 额外的问题:为什么填充用于两种状态,即使它只设置在按下的状态?

4

1 回答 1

1

笔划在笔划路径的任一侧均分。如果有办法“剥离”第二张图像上的红色轮廓,您会看到绿色框与第一张图像中的蓝色框大小完全相同。您认为第一张图像中的“填充”实际上是透明笔划的一部分。

尝试一个实验:使笔触颜色半透明而不是透明,您将能够看到笔触如何跨越到形状的一半。

在 Shape XML 中似乎没有任何方法可以指定对形状内部或外部的描边,因此如果这确实是您需要的,您可能必须Canvas.draw()在代码中进行自己的调用。

于 2016-02-05T17:49:52.810 回答