我尝试使用<shape>
来显示按钮的按下状态。为此,我在正常状态下使用透明色的笔划,在按下状态下使用彩色笔划:
button.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"/>
的样子
P.S。额外的问题:为什么填充用于两种状态,即使它只设置在按下状态?
答案 0 :(得分:1)
笔划在笔划路径的两侧均匀分割。如果有办法去掉&#34;剥离&#34;第二张图像上的红色轮廓,您会看到绿色框与第一张图像中的蓝色框完全相同。而你的想法是&#34;填充&#34;在第一张图片中实际上是透明笔划的一部分。
尝试实验:使笔触颜色半透明而不是透明,您将能够看到笔划如何跨越到形状的中途。
看起来好像Shape XML中没有任何方法可以指定抚摸形状的内部或外部,所以如果这真的是你需要的,你可能需要自己动手Canvas.draw()
调用代码。