2011-06-13 143 views
5

我想创建一个包含RadioGroup的自定义View。在RadioGroup内部,我想要设置RadioButtons,以便第一个RadioButton位于左上方,第二个位于下方,第一个位于右侧第三位,下方位于第四位。换句话说,我想创建一个组,其中的单选按钮排列在一个正方形中。我认为如果我将组的方向设置为垂直,那么所有的单选按钮都将处于一条直线上。另一方面,如果我将方向设置为水平方向,那么再次,这些单选按钮将全部位于一条直线上,并呈水平状态。有没有办法做我想做的事情,还是我被迫设置了两个单独的RadioGroups,都是水平定位?以编程方式设置RadioGroup

+0

您可以使用RelativeLayout而不是LinearLayout – Pratik 2011-06-13 14:53:52

+1

@Pratik会有帮助吗?这将帮助我建立一个相对于别的东西的组,但是相对于彼此的按钮又如何呢? – LuxuryMode 2011-06-13 15:03:37

回答

31

尝试处理RadioButtons而不使用RadioGroup

接通个人RadioButtons并将其保存在ArrayList<RadioButton>中。

List<RadioButton> radioButtons = new ArrayList<RadioButton>(); 

radioButtons.add((RadioButton)findViewById(R.id.button1));   
radioButtons.add((RadioButton)findViewById(R.id.button2)); 
radioButtons.add((RadioButton)findViewById(R.id.button3)); 
etc. 

每个RadioButton设置一个OnCheckedChangeListener

for (RadioButton button : radioButtons){ 

    button.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) processRadioButtonClick(buttonView); 
     } 
    }); 

} 

然后创建一个方法来取消选中未选中的RadioButtons

private void processRadioButtonClick(CompoundButton buttonView){ 

    for (RadioButton button : radioButtons){ 

     if (button != buttonView) button.setChecked(false); 
    } 

} 

使用这种方法,RadioButtons可以位于XML布局的任何位置。

+0

真棒回答马特,你能解释如何获得选定单选按钮的ID,我试过但我失败了。等待您的宝贵答案。谢谢。 – 2017-05-26 06:55:31

0

您应该从RadioGroup继承并覆盖onLayout()方法。

+0

谢谢!你有没有一个例子,说明我想要做的重写会是什么样子? – LuxuryMode 2011-06-13 15:19:39

+0

你可以想出如何从Roman Nurik的仪表板视图实现onLayout:https://gist.github.com/882650 – woodshy 2011-06-13 15:23:24