当试图将信息保存到服务器时,我禁用了 EditTexts(很可能用户无法更改信息,但安全总比遗憾好)。
为了防止用户使用 EditText,我可以使用 setEnabled(false)
或 setFocusable(false)
。为了再次开始使用 EditText,我调用了 setEnabled(true)
或 setFocusable(true); setFocusableInTouchMode(真)
。
我猜测使用 setEnabled
会更有效,因为方法调用更少,但情况是否如此(基本上,我想知道哪种方法更有效)?
或者使用其中一种与另一种相比还有其他我不知道的副作用吗?
编辑 - 解决方案
为了防止自己需要setEnable(true/false)
到多个不同的Fragments
中的多个不同的Views
,我实现了以下代码(我的想法来自另一个 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
都可以调用它。它工作得很好。
请您参考如下方法:
In order to prevent the user from using the EditTexts
我建议您使用 setEnable()
而不是 setFocusable()
因为当 EditText
启用与否时您会看到不同,如果您不想看到差异,只需使用 setFocusable(false)
它会保持相同的外观,但您将无法修改该值。
In order to start using the EditTexts again
你可以调用setEnabled(true)
(如果你使用了setFocusable(false)
,你将不得不使用setFocusable(true)
让我们说点什么:setFocusable()
它用于启用或禁用 View 焦点事件。