我在LinearLayout中有多个按钮,它们都有不同的单击选项。当我选择其中一个时,我想选择它并更改其背景,然后我选择的另一个第一个选择了,然后又选择了新一圈,背景将发生变化。我有8-9个或更多按钮。我该怎么办?
这是action_main.xml
<HorizontalScrollView
android:id="@+id/horScrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp">
<ImageButton
android:id="@+id/spaceship"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/spaceship" />
<ImageButton
android:id="@+id/mask"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
app:srcCompat="@drawable/mask" />
</LinearLayout>
</HorizontalScrollView>
这是Main.java
ImageButton spaces = findViewById(R.id.spaceship);
spaces.setBackgroundColor(Color.TRANSPARENT);
spaces.setOnClickListener(view -> {
if(getChecked())
spaces.setBackgroundColor(Color.TRANSPARENT);
else
spaces.setBackgroundColor(Color.DKGRAY);
setChecked(!check);
modelLoader.loadModel(this, R.raw.sample_ship);
setRenderable(spaceShipRendeble);
});
ImageButton mask = findViewById(R.id.mask);
mask.setBackgroundColor(Color.TRANSPARENT);
mask.setOnClickListener(view -> {
if(getChecked())
mask.setBackgroundColor(Color.TRANSPARENT);
else
mask.setBackgroundColor(Color.DKGRAY);
setChecked(!check);
modelLoader.loadModel(this,R.raw.mask);
setRenderable(maskrendeble);
});
首先,我将检查变量设置为“ false”。
例如,一个按钮被选中,然后变成灰色,而我选择另一个按钮变成了灰色,第一个被选中的按钮将变成透明。但是我做不到。
答案 0 :(得分:0)
您可以检查一个[(ngModel)]="inputValue"
的条件是否被检查。基于此,您可以将所有其他ImageButton
设置为假。我使用相同的值来设置setChecked()
。
RadioButtons
答案 1 :(得分:0)
为按钮的不同状态创建一个具有不同颜色的资源文件。
btn_bg_states.xml :
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true">
<shape>
<solid android:color="your_color" />
</shape>
</item>
<item android:state_pressed="true">
<shape>
<solid android:color="your_other_color" />
</shape>
</item>
<item>
<shape>
<solid android:color="your_default_color" />
</shape>
</item>
</selector>
然后将其设置为可绘制到所有按钮的背景,Android会为您处理其余部分。
android:background="@drawable/btn_bg_states"
答案 2 :(得分:0)
@OnClick({R.id.next,R.id.country_us,R.id.country_india})
public void nextClicked(View view)
{ switch(view.getId()) {
case R.id.next:
Intent intent = new Intent(this, TutorialScreen.class);
intent.putExtra("country_selected", ind_sel);
startActivity(intent);
break;
case R.id.country_india:
ind_sel=true;
setselectedBlank();
view.setBackgroundResource(R.drawable.selected_border);
break;
case R.id.country_us:
ind_sel=false;
setselectedBlank();
view.setBackgroundResource(R.drawable.selected_border);
break;
}
}
private void setselectedBlank() {
country_us.setBackgroundResource(R.drawable.border);
country_india.setBackgroundResource(R.drawable.border);
}
您可以尝试仅调用一种方法将所有背景更改为默认背景,然后再将其更改为选定的颜色
请注意我在这里使用ButterKnife注射库,但是即使您不使用它也不是问题 快乐编码
ImageButton spaces = findViewById(R.id.spaceship);
spaces.setBackgroundColor(Color.TRANSPARENT);
spaces.setOnClickListener(view -> {
setAllnotSelected();
spaces.setBackgroundColor(Color.DKGRAY);
});
ImageButton mask = findViewById(R.id.mask);
mask.setBackgroundColor(Color.TRANSPARENT);
mask.setOnClickListener(view -> {
setAllnotSelected();
mask.setBackgroundColor(Color.DKGRAY);
});
public void setAllnotSelected();
{
mask.setBackgroundColor(Color.TRANSPARENT);
spaces.setBackgroundColor(Color.TRANSPARENT);
}