尝试将信息保存到服务器时,我禁用了EditTexts(用户无法更改信息,但比安全感更安全。)
为了防止用户使用EditTexts,我可以使用setEnabled(false)
或setFocusable(false)
。为了再次开始使用EditTexts,我致电setEnabled(true)
或setFocusable(true); setFocusableInTouchMode(true)
。
我猜测使用setEnabled
效率更高,因为方法调用较少,但情况就是这样(基本上,我想知道哪种方法更有效)?
或者是否存在使用其中一种与我不了解的其他副作用?
为了防止自己需要setEnable(true/false)
多个不同Views
中的多个Fragments
,我实施了以下代码(我从另一个StackOverflow answer获取了这个想法):
public static void setViewAndChildrenEnabled(View view, boolean enabled) {
view.setEnabled(enabled);
if(view instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) view;
for(int i = 0; i < viewGroup.getChildCount(); i++) {
View child = viewGroup.getChildAt(i);
setViewAndChildrenEnabled(child, enabled);
}
}
}
我把它放在我的Utils
包中,所以任何Activity/Fragment
都可以调用它。它工作得非常好。
答案 0 :(得分:2)
为了防止用户使用EditTexts
我建议您使用setEnable()
代替setFocusable()
,因为如果您启用了EditText
,那么您会发现不同,如果您不想看到区别只是使用setFocusable(false)
它会保持相同的外观,但你无法修改价值。
为了再次开始使用EditTexts
您可以拨打setEnabled(true);
(如果您使用setFocusable(false);, you'll have to use setFocusable(true);
让我们说一句:setFocusable()
它用于启用或禁用视图焦点事件。
答案 1 :(得分:0)
您应该使用setEnabled
启用和禁用。 setFocusable允许用户点击,与触摸模式相同,这将被忽略。