嗨,我有这样的 UI 要求-
有四个按钮:Popular
, A-z
, NearBy
,Category
可以一次按下其中任何一个。假设如果Popular
按钮被按下,那么其余的按钮看起来就像没有被按下。
现在我希望它保持这种状态,直到我按下其余三个按钮之一。一旦按下三个中的任何一个,该特定按钮应突出显示,其余按钮应正常。
为此,您应该使用单选按钮,并且您需要有一个选择器来为不同的状态定义不同的可绘制对象。这是您如何拥有选择器的方法。将其命名为button_selector并将其放入可绘制文件夹。并且您的按钮需要有两个不同的可绘制对象,分别是正常状态和按下状态。将其命名为button和button_selected。
<?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_selected"></item>
<item android:state_checked="true" android:drawable="@drawable/button_selected"></item>
<item android:drawable="@drawable/button"></item>
</selector>
至于单选按钮;
<RadioGroup
android:id="@+id/radio_group_card_selector"
android:layout_width="wrap_content"
android:layout_height="28dp"
android:layout_gravity="center_horizontal|center_vertical"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/radio_group_highlights"
android:layout_width="69dp"
android:layout_height="28dp"
android:layout_gravity="left"
android:background="@drawable/button_selector"
android:button="@null"
android:gravity="center_vertical|center_horizontal"
android:text="@string/Highlights"
android:textColor="#21596c"
android:textSize="10sp"
android:textStyle="normal" >
</RadioButton>
<RadioButton
android:id="@+id/radio_group_products"
android:layout_width="69dp"
android:layout_height="28dp"
android:layout_gravity="left"
android:background="@drawable/button_selector"
android:button="@null"
android:gravity="center_vertical|center_horizontal"
android:text="@string/All"
android:textColor="#21596c"
android:textSize="10sp"
android:textStyle="normal" >
</RadioButton>
<RadioButton
android:id="@+id/radio_group_mycards"
android:layout_width="69dp"
android:layout_height="28dp"
android:background="@drawable/button_selector"
android:button="@null"
android:checked="true"
android:gravity="center_vertical|center_horizontal"
android:text="@string/My_Cards"
android:textColor="#21596c"
android:textSize="10sp"
android:textStyle="normal" >
</RadioButton>
</RadioGroup>
所以这样你就不需要在运行时处理代码了。
编辑:如果您只想使用颜色而不是可绘制对象,那么您可以使用下面的代码来更好地理解它是如何工作的。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"> <!-- pressed -->
<shape>
<gradient
android:startColor="#058CF5"
android:centerColor="#0273ED"
android:centerY="0.75"
android:endColor="#015DE6"
android:angle="270" />
</shape>
</item>
<item android:state_checked="true"> <!-- focused -->
<shape>
<gradient
android:startColor="#058CF5"
android:centerColor="#0273ED"
android:centerY="0.75"
android:endColor="#015DE6"
android:angle="270" />
</shape>
</item>
<item> <!-- default -->
<shape>
<solid android:color="#E6E6E6" />
</shape>
</item>
private TextView[] viewsArray;
public void onCreate(Bundle bundle){
super.onCreate(bundle);
setContentView(R.layout.mylayout);
TextView[] array // all your buttons
for (TextView view : array) {
view.setOnClickListener(mListener);
}
viewsArray = array;
}
private OnClickListener mListener = new OnClickListener(){
public void onClick(View view){
resetViews();
view.setBackgroundResource(R.drawable.selected);
}
};
private void resetViews(){
for(TextView view : viewsArray){
view.setBackgroundResource(R.drawable.notselected);
}
}