搞这个搞了好几次了,终于寻求到了答案
搞了好几次了,用Pressed、selected属性都搞了搞不行,最终在大神博客中解决,万分感谢!!
转自大神博客ovo
啥效果呢?
如图,点击其中一个按钮时,切换状态,点哪个哪个为红色,就这样的的效果
这效果怎么玩?
- 先在drawable文件中建xml样式文件,代码如下
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_pressed" android:state_enabled="false" /><!-- 点击时的颜色 -->
<item android:drawable="@drawable/button_normal" android:state_enabled="true" /><!-- 未点击时的颜色 -->
</selector>
- 定义这两个button_pressed(点击)和button_normal(为点击)时的样式
button_pressed.xml (/res/drawable/button_pressed.xml)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@android:color/holo_red_dark" />
</shape>
button_normal.xml (/res/drawable/button_normal.xml)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#226022" />
</shape>
- 然后将样式添加到按钮中【android:background="@drawable/button_box"】
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context=".OtherActivity">
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="87dp"
android:background="@drawable/button_box"
android:text="数据上传"
android:textSize="16sp" />
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="87dp"
android:background="@drawable/button_box"
android:text="数据上传"
android:textSize="16sp" />
<Button
android:id="@+id/btn3"
android:layout_width="wrap_content"
android:layout_height="87dp"
android:background="@drawable/button_box"
android:text="数据上传"
android:textSize="16sp" />
</LinearLayout>
- 重点来了,在activity中通过设置button的enable属性来达到控制样式的目的
public class OtherActivity extends AppCompatActivity implements View.OnClickListener {
private Button mbtn1;
private Button mbtn2;
private Button mbtn3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
mbtn1 = findViewById(R.id.btn1);
mbtn2 = findViewById(R.id.btn2);
mbtn3 = findViewById(R.id.btn3);
mbtn1.setOnClickListener(this);
mbtn2.setOnClickListener(this);
mbtn3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
setEnable(mbtn1);
break;
case R.id.btn2:
setEnable(mbtn2);
break;
case R.id.btn3:
setEnable(mbtn3);
break;
}
}
private void setEnable(Button btn) {
List<Button> buttonList = new ArrayList<>();
if (buttonList.size() == 0) {
buttonList.add(mbtn1);
buttonList.add(mbtn2);
buttonList.add(mbtn3);
}
for (int i = 0; i < buttonList.size(); i++) {
buttonList.get(i).setEnabled(true);
}
btn.setEnabled(false);
}
}