我有一个布局,每个图像下面有三个图像和三个单选按钮。我希望如果选中一个按钮,那么我知道用户已经选择了上面的图像。这是我的布局文件:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:gravity="center_horizontal">
<LinearLayout
android:id="@+id/frontRadioLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/frontShotIV"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/border_image_bkg"
android:src="@drawable/ic_hair_tools"
android:scaleType="centerCrop"/>
<RadioButton
android:id="@+id/radioFrontImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
<LinearLayout
android:id="@+id/sideRadioLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_toRightOf="@id/frontRadioLayout"
android:layout_marginLeft="16dp">
<ImageView
android:id="@+id/sideShotIV"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/border_image_bkg"
android:src="@drawable/ic_hair_tools"
android:scaleType="centerCrop"/>
<RadioButton
android:id="@+id/radioSideImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
<LinearLayout
android:id="@+id/backRadioLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_toRightOf="@id/sideRadioLayout"
android:layout_marginLeft="16dp">
<ImageView
android:id="@+id/backShotIV"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/border_image_bkg"
android:src="@drawable/ic_hair_tools"
android:scaleType="centerCrop"/>
<RadioButton
android:id="@+id/radioBackImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
</RelativeLayout>
布局正确呈现但测试时会出现这种情况 - 所有按钮都会被选中并且无法取消选中。我已经尝试将我的布局简化为:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:gravity="center_horizontal">
<ImageView
android:id="@+id/frontShotIV"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/border_image_bkg"
android:scaleType="centerCrop"
android:src="@drawable/ic_hair_tools" />
<RadioButton
android:id="@+id/radioFrontImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/frontShotIV"
android:gravity="center_horizontal"
android:layout_marginLeft="33dp"/>
<ImageView
android:id="@+id/sideShotIV"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/border_image_bkg"
android:scaleType="centerCrop"
android:src="@drawable/ic_hair_tools"
android:layout_toRightOf="@+id/frontShotIV"
android:layout_marginLeft="16dp"/>
<RadioButton
android:id="@+id/radioSideImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/frontShotIV"
android:gravity="center_horizontal"
android:layout_toRightOf="@+id/frontShotIV"
android:layout_marginLeft="46dp"/>
<ImageView
android:id="@+id/backShotIV"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/border_image_bkg"
android:src="@drawable/ic_hair_tools"
android:scaleType="centerCrop"
android:layout_toRightOf="@+id/sideShotIV"
android:layout_marginLeft="16dp"/>
<RadioButton
android:id="@+id/radioBackImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/backShotIV"
android:layout_toRightOf="@+id/sideShotIV"
android:layout_marginLeft="46dp"/>
</RelativeLayout>
但它仍然产生相同的检查所有行为。 任何人都可以帮我解决这个问题,使用布局单选按钮单独检查并取消选中另一个选项吗? 感谢。
答案 0 :(得分:0)
您需要将RadioButton
放入RadioGroup
。
例如:
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/radioFrontImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/frontShotIV"
android:gravity="center_horizontal"
android:layout_marginLeft="33dp"/>
</RadioGroup>
来自Google文档:
但是,由于单选按钮是互斥的,因此必须分组 他们一起在RadioGroup里面。通过将它们组合在一起, 系统确保一次只能选择一个单选按钮。
或者,您可以使用CheckBox
有关详细信息,请查看原始文档:
https://developer.android.com/guide/topics/ui/controls/radiobutton?authuser=0
答案 1 :(得分:0)
如果我已正确理解您的要求。您希望允许用户只选择三个图像中的一个图像。
然后您必须使用RadioButton
转到RadioGroup因为使用无线电组,您可以轻松识别选择的图像。而无线电组将允许用户一次只选择一个选项。
您可以按照this示例进行尝试。 activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main4Activity">
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/frontShotIV"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@color/colorAccentLight"
android:scaleType="centerCrop"
android:src="@drawable/ic_launcher_background" />
<ImageView
android:id="@+id/sideShotIV"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="16dp"
android:background="@color/colorAccentLight"
android:scaleType="centerCrop"
android:src="@drawable/ic_launcher_background" />
<ImageView
android:id="@+id/backShotIV"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="16dp"
android:background="@color/colorAccentLight"
android:scaleType="centerCrop"
android:src="@drawable/ic_launcher_background" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/layout">
<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radioFrontImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/frontShotIV"
android:layout_marginLeft="60dp"
android:gravity="center_horizontal" />
<RadioButton
android:id="@+id/radioSideImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/frontShotIV"
android:layout_marginLeft="90dp"
android:layout_toRightOf="@+id/frontShotIV"
android:gravity="center_horizontal" />
<RadioButton
android:id="@+id/radioBackImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/backShotIV"
android:layout_marginLeft="80dp"
android:layout_marginTop="4dp" />
</RadioGroup>
</LinearLayout>
<Button
android:id="@+id/btnCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="166dp"
android:text="Check selected Image"/></RelativeLayout>
Activity.java:
public class Main4Activity extends AppCompatActivity {
private RadioGroup radiogroup;
private RadioButton radioFrontImg;
private RadioButton radioSideImg;
private RadioButton radioBackImg;
private RadioButton radioButton;
private Button btnCheck;
private String selectedImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
init();
}
private void init() {
radiogroup = findViewById(R.id.radiogroup);
radioFrontImg = findViewById(R.id.radioFrontImg);
radioSideImg = findViewById(R.id.radioSideImg);
radioBackImg = findViewById(R.id.radioBackImg);
btnCheck = findViewById(R.id.btnCheck);
btnCheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
method1();
method2();
}
});
}
private void method2() {
if (radioFrontImg.isChecked()) {
selectedImage = "frontShotIV";
} else if (radioSideImg.isChecked()) {
selectedImage = "sideShotIV";
} else if (radioBackImg.isChecked()) {
selectedImage = "backShotIV";
}
Toast.makeText(getApplicationContext(), selectedImage, Toast.LENGTH_LONG).show();
Log.e("selectedImage", selectedImage);
}
private void method1() {
int selectedId = radiogroup.getCheckedRadioButtonId();
radioButton = (RadioButton) findViewById(selectedId);
if (selectedId == R.id.radioFrontImg)
selectedImage = "frontShotIV";
else if (selectedId == R.id.radioSideImg)
selectedImage = "sideShotIV";
else if (selectedId == R.id.radioBackImg)
selectedImage = "backShotIV";
Toast.makeText(Main4Activity.this, selectedImage, Toast.LENGTH_SHORT).show();
Log.e("selectedImage",selectedImage);
}
}
您可以使用两种方法。