用于更改其背景和文本颜色的按钮的选择器

时间:2014-06-24 10:16:10

标签: android button selector onclicklistener

我有一组3个按钮,想要在单击时更改特定按钮的颜色和文本,并在单击另一个按钮时再次更改为正常。

我第一次使用选择器而且我不清楚状态是否可以帮助我解决这个问题。

这就是我在做什么。

这些是我的3个按钮

<LinearLayout
    android:id="@+id/lineartab"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:gravity="center|center_horizontal"
    android:orientation="horizontal"
    android:weightSum="3" >

    <Button
        android:id="@+id/allMessagesBT"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/message_top_btn_selector"
        android:singleLine="false"
        android:text="All \nMessages"
        android:textColor="#7b818b"
        android:textSize="14sp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginBottom="3dp"
        android:layout_marginTop="3dp"
        android:background="@drawable/line" />

    <Button
        android:id="@+id/createNewBT"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/message_top_btn_selector"
        android:singleLine="false"
        android:text="Create \nNew"
        android:textColor="#7b818b"
        android:textSize="14sp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginBottom="3dp"
        android:layout_marginTop="3dp"
        android:background="@drawable/line" />

    <Button
        android:id="@+id/deleteBT"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/message_top_btn_selector"
        android:singleLine="false"
        android:text="Delete \nSelected"
        android:textColor="#7b818b"
        android:textSize="14sp" />
</LinearLayout>

这是我的选择器xml

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

<item android:drawable="@drawable/login_edittext" android:state_selected="true"></item>
<item android:drawable="@drawable/btn_accept_normal" android:state_pressed="true</item>
<item android:drawable="@drawable/btn_accept_hover"></item>

 </selector>

我想要做的是在点击按钮后更改背景颜色并保持这种状态直到单击另一个按钮

4 个答案:

答案 0 :(得分:1)

尝试As Devil Abhi建议并添加一些代码,以便在单击时更改特定按钮的颜色和文本,并在单击另一个按钮时再次更改为正常。

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId()){

    case R.id.button1:
        b1.setBackgroundColor(Color.RED);
        b1.setTextColor(Color.WHITE); 
        b1.setTypeface(null, Typeface.BOLD);
        b2.setBackgroundColor(*default background color*);
        b3.setBackgroundColor(*default background color*);
        break;

    case R.id.button2:
        b2.setBackgroundColor(Color.GREEN); 
        b2.setTextColor(Color.WHITE);
        b2.setTypeface(null, Typeface.BOLD);
        b1.setBackgroundColor(*default background color*);
        b3.setBackgroundColor(*default background color*);
        break;

    case R.id.button3:
        b3.setBackgroundColor(Color.BLUE);
        b3.setTextColor(Color.WHITE);
        b3.setTypeface(null, Typeface.BOLD);
        b1.setBackgroundColor(*default background color*);
        b2.setBackgroundColor(*default background color*);
        break;

    }

答案 1 :(得分:0)

您需要使用RadioButtons或ToggleButton而不是按钮。在您的选择器中,您需要为state_checked定义背景并控制您在代码中的状态(对于切换按钮,对于radioGroup中的单选按钮不是必需的。)

当您按下另一个按钮时,我建议使用toggle button并将设置为false。

答案 2 :(得分:0)

试试这个......

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" 
    android:id="@+id/relative1">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="49dp"
        android:layout_marginTop="39dp"
        android:text="Red" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="34dp"
        android:text="Green" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/button2"
        android:layout_centerVertical="true"
        android:text="Blue" />

</RelativeLayout>

package com.example.backgroundcolor;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;

public class MainActivity extends Activity implements OnClickListener {

    RelativeLayout rl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rl = (RelativeLayout)findViewById(R.id.relative1);
        Button b1 = (Button)findViewById(R.id.button1);
        Button b2 = (Button)findViewById(R.id.button2);
        Button b3 = (Button)findViewById(R.id.button3);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        b3.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){

        case R.id.button1:
            rl.setBackgroundColor(Color.RED);
            break;

        case R.id.button2:
            rl.setBackgroundColor(Color.GREEN);
            break;

        case R.id.button3:
            rl.setBackgroundColor(Color.BLUE);
            break;

        }
    }

}

答案 3 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

<强> radio_button_background_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/darker_gray" android:state_checked="true" android:state_pressed="false"/>
    <item android:drawable="@android:color/white" android:state_checked="false" android:state_pressed="false"/>
    <item android:drawable="@android:color/darker_gray" android:state_checked="true" android:state_pressed="true"/>
    <item android:drawable="@android:color/white" android:state_checked="false" android:state_pressed="true"/>
</selector>

<强> radio_button_text_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/white" android:state_checked="true"></item>
    <item android:color="@android:color/black"></item>
</selector>


<LinearLayout
        android:id="@+id/lineartab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RadioButton
            android:id="@+id/allMessagesBT"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:gravity="center"
            android:background="@drawable/radio_button_background_selector"
            android:textColor="@drawable/radio_button_text_selector"
            android:text="All \nMessages"
            android:textSize="14sp"
            android:checked="true"/>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginBottom="3dp"
            android:layout_marginTop="3dp"
            android:background="@drawable/line" />

        <RadioButton
            android:id="@+id/createNewBT"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:gravity="center"
            android:background="@drawable/radio_button_background_selector"
            android:textColor="@drawable/radio_button_text_selector"
            android:singleLine="false"
            android:text="Create \nNew"
            android:textSize="14sp" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginBottom="3dp"
            android:layout_marginTop="3dp"
            android:background="@drawable/line" />

        <RadioButton
            android:id="@+id/deleteBT"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:gravity="center"
            android:background="@drawable/radio_button_background_selector"
            android:textColor="@drawable/radio_button_text_selector"
            android:text="Delete \nSelected"
            android:textSize="14sp" />
</LinearLayout>