按钮外观取决于其状态

时间:2012-12-10 23:52:01

标签: android android-layout

我有问题。我不知道如何根据状态更改按钮的外观。

xml中的标准外观不起作用,默认也不起作用。

{
    button1 = (Button) findViewById(R.id.button5);

    button1.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) 
                {
                    case MotionEvent.ACTION_DOWN:
                        mp[0] = loadSample(1);
                        mp[0].start(); 
                        break;
                    case MotionEvent.ACTION_UP:
                        mp[0].stop(); 
                        //mp.reset();
                        mp[0].release(); 
                        break;  
                }
        return true;
        }
    });
}

2 个答案:

答案 0 :(得分:1)

听起来您正在寻找带有图像选择器的ImageButton。这允许您为给定按钮定义pressedfocusednormal状态。

示例直接来自ImageButton API页面。一旦实现如下,Android将根据您定义的选择器自动选择适合按钮当前状态的图像。 http://developer.android.com/reference/android/widget/ImageButton.html

作为drawable文件夹中的XML:

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

答案 1 :(得分:0)

你在XML中做过这样的事吗?

<selector
  xmlns:android="http://schemas.android.com/apk/res/android">

   <item android:drawable="@drawable/myButtonYellow" 
        android:state_pressed="true" />
   <item android:drawable="@drawable/myButtonNotYellow" />
</selector>

android:state_pressed =&#34; true&#34; line会将其设置为根据其按下状态而变化。可以找到完整的州名单here

myButton定义为:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

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

    <solid android:color="@color/yellow" />

    <padding
        android:bottom="7dp"
        android:left="12dp"
        android:right="12dp"
        android:top="7dp" />

    <stroke
        android:width="1dp"
        android:color="@color/white" />

</shape>