我的custom_button.xml
文件夹中的drawable
用于按下我的按钮,默认情况下。它看起来如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="@color/red"
android:endColor="@color/light_red"
android:angle="270" />
<corners
android:radius="5dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="@color/light_purple"
android:endColor="@color/purple"
android:angle="270" />
<corners
android:radius="5dp" />
</shape>
</item>
未按下时我的按钮看起来很好,它显示默认的紫色按钮。但是当我按下它时,它不会变为红色按钮,因为它应该在state_pressed
时。
在我的activity_main.xml
中,按钮的定义如下:
<Button
android:id="@+id/button1"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/custom_button"
android:layout_margin="5dp"/>
如果这有任何区别,我正在使用嵌套的LinearLayout
。
如果有什么我错过了,请告诉我。
编辑:我发现了问题的根源,但不确定如何修复它。当我从我的createListeners
中删除以下听众时,按钮会按原样改变颜色。
b1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
int beat = getBeat(1);
m1 = MediaPlayer.create(MainActivity.this, beat);
m1.start();
m1.setLooping(true);
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
m1.release();
}
return false;
}
});
它基本上做的是,只要按下按钮,它就会播放一首歌。这如何干扰按钮颜色?
答案 0 :(得分:0)
我尝试了你的选择器,它正在我这边工作。 我注意到你的按钮的宽度是0dp和什么时候 我在我身边使用了这个XML,它没有用。
尝试将其更改为:
<Button
android:id="@+id/button1"
android:layout_width="warap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="test"
android:background="@drawable/custom_button"
android:layout_margin="5dp"/>
这是我使用的custom_buttom.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="#FF0000"
android:endColor="#FF00FF"
android:angle="270" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="#1E669B"
android:endColor="#1E669B"
android:angle="270" />
</shape>
</item>
</selector>
答案 1 :(得分:0)
好吧,所以我设法让它发挥作用但它可能是一种迂回的方式。我基本上改变了setOnTouchListener
所以看起来像这样:
b1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
int beat = getBeat(1);
m1 = MediaPlayer.create(MainActivity.this, beat);
m1.start();
m1.setLooping(true);
b1.setPressed(true);
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
b1.setPressed(false);
m1.release();
}
return false;
}
});
只需手动更改按钮的按下状态。
答案 2 :(得分:0)
似乎onTouchListener()
无法正常使用选择器。您必须在ACTION_DOWN和ACTION_UP中手动更改背景。