Android:如何使用togglebuttons获取radiogroup?

Pet*_*rdk 43 android togglebuttonbar

我想要一组按钮,用户可以选择其中一个作为选项.它必须是像行为一样的无线电组,但我不希望无线电圈存在.我只希望用户只能切换其中一个按钮.

我想我需要像togglegroup一样.

Android中是否存在类似的内容?

小智 86

我只是重复使用RadioGroup,像这样:(请注意onClick属性,即点击一个按钮会触发你的活动的onToggle(View)方法.

<RadioGroup android:id="@+id/toggleGroup"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            android:orientation="horizontal"
        >

    <ToggleButton android:id="@+id/btn_Letter"
                  android:layout_height="wrap_content"
                  android:layout_width="fill_parent"
                  android:layout_weight="1"
                  android:textSize="14sp"
                  android:textOn="Letter"
                  android:textOff="Letter"
                  android:onClick="onToggle"
                  android:checked="true"
            />
    <ToggleButton android:id="@+id/btn_A4"
                  android:layout_height="wrap_content"
                  android:layout_width="fill_parent"
                  android:layout_weight="1"
                  android:textSize="14sp"
                  android:textOn="A4"
                  android:textOff="A4"
                  android:onClick="onToggle"
            />
</RadioGroup>
Run Code Online (Sandbox Code Playgroud)

在您的Activity或其他地方,您可以定义一个监听器,例如

static final RadioGroup.OnCheckedChangeListener ToggleListener = new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(final RadioGroup radioGroup, final int i) {
            for (int j = 0; j < radioGroup.getChildCount(); j++) {
                final ToggleButton view = (ToggleButton) radioGroup.getChildAt(j);
                view.setChecked(view.getId() == i);
            }
        }
    };
Run Code Online (Sandbox Code Playgroud)

并注册,例如onCreate():

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     this.setContentView(R.layout.scan_settings);

     ((RadioGroup) findViewById(R.id.toggleGroup)).setOnCheckedChangeListener(ToggleListener);    
 }
Run Code Online (Sandbox Code Playgroud)

最后onToggle(View),你会做任何需要发生的事情,特定于你的应用程序.并使用切换视图的id 调用RadioGroup的检查方法.像这样:

public void onToggle(View view) {
    ((RadioGroup)view.getParent()).check(view.getId());
    // app specific stuff ..
}
Run Code Online (Sandbox Code Playgroud)

  • 我建议在`onToggle`中设置新的实际值之前添加`((RadioGroup)view.getParent()).check(0);`.这将阻止ToggleButton的切换功能,并在"ToggleListener"的帮助下强制它像RadioButton一样运行. (7认同)
  • ToggleListener救了我的一天......谢谢 (3认同)

dha*_*g23 13

您可以使用常规单选按钮并将图像用于RadioButton背景,而不指定文本字符串:

<RadioButton 
android:id="@+id/custom_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
    android:button="@null"
    android:background="@drawable/button_custom"
    />
Run Code Online (Sandbox Code Playgroud)

对于背景,使用任何drawable,但很可能你会想要使用选择器来为不同的状态提供不同的图像.最简单的版本只使用两个图像:

<item android:state_checked="true" android:state_pressed="true"
      android:drawable="@drawable/custom_selected" />
<item android:state_checked="false" android:state_pressed="true"
      android:drawable="@drawable/custom_normal" />

<item android:state_checked="true" android:state_focused="true"
      android:drawable="@drawable/custom_selected" />
<item android:state_checked="false" android:state_focused="true"
      android:drawable="@drawable/custom_normal" />

<item android:state_checked="false" android:drawable="@drawable/custom_normal" />
<item android:state_checked="true" android:drawable="@drawable/custom_selected" />
Run Code Online (Sandbox Code Playgroud)

有了这个,单选按钮看起来像一个常规按钮(或者更确切地说,看起来像你提供的任何可绘制的),并且表现得像一个无线电组中的单选按钮.

  • 这个解决方案是最干净的.它保持了`RadioButton`功能,同时实现了`ToggleButton`的可见效果.@Wolf Paulus的解决方案可行,但它允许该组处于所有按钮关闭的状态. (2认同)