如何在按钮列表中选择一个按钮?

时间:2019-02-22 12:14:34

标签: java android xml

我在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”。

例如,一个按钮被选中,然后变成灰色,而我选择另一个按钮变成了灰色,第一个被选中的按钮将变成透明。但是我做不到。

3 个答案:

答案 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);
}