Mic*_* SM 6 android view android-ui
我刚刚发现View.setEnabled(false)在android中运行不正常,方法如下:
这似乎是个bug.但是如何获得真正的DISABLE功能呢?
编辑:忘记提及第一个.
需要递归地设置所有后代,否则布局中的RadioButtons将不会被setEnabled,因为RadioButtons是孙子而不是直接子代,中间有RadioGroup。我根据其他人的回答在这里记录了迄今为止我最好的解决方案。
public static void setEnabledAll(View v, boolean enabled) {
v.setEnabled(enabled);
v.setFocusable(enabled);
if(v instanceof ViewGroup) {
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++)
setEnabledAll(vg.getChildAt(i), enabled);
}
}
Run Code Online (Sandbox Code Playgroud)
子类此时不起作用。如果我有:
public MyView class View {
protected void setEnabled(boolean enabled, boolean setChildren){
setEnabled(enabled);
setFocusable(enabled);
if(setChildren && this isinstanceof ViewGroup){
for ( int i = 0 ; i < this.getChildCount() ; i++ )
//this line will have issue if it is not MyView
this.getChildAt(i).setEnabled(enabled, true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
除非 View 本身有这样的重载 setEnabled:
public class View {
protected void setEnabled(boolean enabled, boolean setChildren){
setEnabled(enabled);
setFocusable(enabled);
if(setChildren && this isinstanceof ViewGroup){
for ( int i = 0 ; i < this.getChildCount() ; i++ )
this.getChildAt(i).setEnabled(enabled, true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案将消除问题1、2、3。问题4可以通过为RadioGroup设置禁用样式选择器来解决 - 我不确定为什么android没有默认的RadioGroup禁用样式选择器。也许是 Android 增强的另一个点。Android 在 SDK 设计方面非常灵活,但这也意味着有时需要额外的工作。
| 归档时间: |
|
| 查看次数: |
10097 次 |
| 最近记录: |