RadioGroup.setEnabled(false) 无法按预期工作
Posted
技术标签:
【中文标题】RadioGroup.setEnabled(false) 无法按预期工作【英文标题】:RadioGroup.setEnabled(false) doesn't work as expected 【发布时间】:2012-10-27 00:42:58 【问题描述】:我用setEnabled(false)
设置为不可用,但不起作用,经过这个方法,RadioGroup.isEnabled()
的值为false。值已更改。
代码来自android Programming Guide。
PS:Spinner
组件也使用setEnabled(false)
。
代码如下:
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioGroup;
public class TestRadioGroup extends Activity
@Override
public void onCreate(Bundle savedInstanceState)
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.radiogroup);
final RadioGroup testRadioGroup = (RadioGroup) findViewById(R.id.testRadioGroup);
final Button changeEnabledButton = (Button) findViewById(R.id.changeEnabledButton);
changeEnabledButton.setOnClickListener(new OnClickListener()
public void onClick(View v)
// TODO Auto-generated method stub
changeEnabled(testRadioGroup);
);
final Button changeBgColorButton = (Button) findViewById(R.id.changeBackgroundColorButton);
changeBgColorButton.setOnClickListener(new OnClickListener()
public void onClick(View v)
// TODO Auto-generated method stub
changeBgColor(testRadioGroup);
);
protected void changeBgColor(RadioGroup testRadioGroup)
// TODO Auto-generated method stub
testRadioGroup.setBackgroundColor(Color.BLUE);
protected void changeEnabled(RadioGroup testRadioGroup)
// TODO Auto-generated method stub
if (testRadioGroup.isEnabled())
testRadioGroup.setEnabled(false);
else
testRadioGroup.setEnabled(true);
【问题讨论】:
【参考方案1】:通过循环迭代和禁用属于单选组的每个按钮,例如:
for (int i = 0; i < testRadioGroup.getChildCount(); i++)
testRadioGroup.getChildAt(i).setEnabled(false);
【讨论】:
,非常感谢!而且,第二个方法实际上效果很好。它禁用了所有的 RadioButton!但第一个仍然不起作用!代码在您的机器上运行良好吗? 这是 Android 的设计缺陷吗? RadioGroup 是 View 的子类,继承了方法,setEnabled 甚至为它做了什么?【参考方案2】:视图可以由多个可触摸元素组成。您必须将它们全部禁用,如下所示:
for(View lol : your_spinner.getTouchables() )
lol.setEnabled(false);
如果它是一个简单的,因为它也返回自己:
查找并返回作为该视图后代的所有可触摸视图,如果它本身是可触摸的,则可能包括该视图。
View#getTouchables()
【讨论】:
【参考方案3】:下面的代码不能用;
for(View lol : your_spinner.getTouchables() )
lol.setEnabled(false);
一旦视图被禁用,就没有可触摸的子/后代视图了。
【讨论】:
以上是关于RadioGroup.setEnabled(false) 无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
TYPO3 Fluidcontent:如何在对象内使用 FAL
TYPO3:如何使用flux:field.inline.fal 图像作为背景