Android EditText setEnabled vs setFocusable

时间:2015-09-13 23:23:07

标签: android

尝试将信息保存到服务器时,我禁用了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都可以调用它。它工作得非常好。

2 个答案:

答案 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允许用户点击,与触摸模式相同,这将被忽略。