Android 按钮在按下时没有变化

Android button doesn't change when pressed

我遇到了一个问题,当我点击按钮时它没有改变背景图片

这是btn_states.xml

<item android:drawable="@drawable/btn_normal"/>
<item android:drawable="@drawable/btn_active" android:state_pressed="true"/>
<item android:drawable="@drawable/btn_active" android:state_focused="true"/>

和activity_main.xml

 <Button
        android:id="@+id/button1"
        android:layout_width="250dp"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="@drawable/btn_states"
        android:text="@string/app_name"
        android:textColor="#FFFFFF" />            

和 MainActivity.class

 final Button button1 = (Button) findViewById(R.id.button1);
    button1.setBackgroundResource(R.drawable.btn_states);
    button1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this,
                    AboutActivity.class);
            startActivity(intent);
        }
    });

<selector> 元素膨胀为 StateListDrawable,通过线性搜索一组状态规范,找到最适合给定状态集的可绘制对象。它将 select 第一个 <item> 匹配状态集。

在您的示例中,第一个 <item> 没有指定状态,包括(true)或排除(false),因此它匹配所有状态集。因此,搜索将提前结束,第一个 <item> 的可绘制对象将用于所有可能的状态集。

相反,您可以这样订购:

<selector>
    <item android:state_pressed="true"
          android:drawable="@drawable/btn_active" />
    <item android:state_focused="true"
          android:drawable="@drawable/btn_active" />
    <item android:drawable="@drawable/btn_normal" />
</selector>