Android:点击时更改按钮颜色

hok*_*sha 6 java android

基本上,我试图创建一个按钮,单击时(注意:不是按下)会改变颜色从颜色1至COLOR2.再次单击时,它将从color2更改为color1.

我疯狂搜索,我设法提取的唯一信息是按下按钮时更改颜色的方式,即当用户按下按钮时(此代码将在下面写).但是,我希望在用户单击(按下并释放)按钮时更改颜色,然后在用户再次单击后再更改颜色.

此文件位于res/drawable中

<!-- Changes color when user hols down button -->
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true">
    <shape>
        <!-- change to color2 -->
    </shape>
</item>

<item>
    <shape>
        <!-- change to color1 -->
    </shape>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)

Boj*_*man 8

boolean tmp = false;
button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
         tmp = !tmp;
         v.setBackgroundColor(tmp ? Color.RED : Color.BLUE);
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:显然你想要一个更复杂的例子

首先创建一个可绘制的XML并将其命名为pink_button.xml并将以下代码放入其中

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">

    <solid android:color="#FF5EF1"/>
    <corners android:radius="15dp"/>
    <stroke
        android:width="1dp"
        android:color="#303030"/>

</shape>
Run Code Online (Sandbox Code Playgroud)

现在制作一个blue_button.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">

    <solid android:color="#008DFF"/>
    <corners android:radius="15dp"/>
    <stroke
        android:width="1dp"
        android:color="#303030"/>

</shape>
Run Code Online (Sandbox Code Playgroud)

现在制作一些演示活动布局,我使用了button_demo_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <Button
        android:id="@+id/btnDemo"
        android:layout_width="150dp"
        android:layout_height="30dp"
        android:layout_centerInParent="true"
        android:layout_marginTop="100dp"
        android:background="@drawable/pink_button"
        android:gravity="center"
        android:text="PINK"
        android:textColor="@android:color/white"
        android:textSize="15sp"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

最后,活动,无论你想要什么,我都使用ButtonDemoActivity

public class ButtonDemoActivity extends Activity {


    private Button btnDemo;
    private boolean isPink = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.button_demo_activity);

        btnDemo = (Button) findViewById(R.id.btnDemo);
        btnDemo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                isPink = !isPink;
                int resId = isPink ? R.drawable.pink_button : R.drawable.blue_button;
                btnDemo.setBackgroundResource(resId);
                btnDemo.setText(isPink ? "PINK" : "BLUE");
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是每个状态下按钮的最终外观 在此输入图像描述