我有一组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>
我想要做的是在点击按钮后更改背景颜色并保持这种状态直到单击另一个按钮
答案 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>