代码之家  ›  专栏  ›  技术社区  ›  Josef Pfleger

为什么我可以输入一个禁用的EditText?

  •  10
  • Josef Pfleger  · 技术社区  · 16 年前

    如果我禁用 EditText 使用小部件

    editText.setEnabled(false);

    我仍然可以使用屏幕上的输入方法(在模拟器和g1上)输入它。这是故意的吗?我如何解决这个问题?

    8 回复  |  直到 8 年前
        1
  •  9
  •   Jon Colverson jlajlar    14 年前

    我注意到你不能通过点击一个被禁用的edittext来激活屏幕键盘,而且del键也不起作用,所以我觉得这是一个bug。我把它归档为 issue 2771 在Android问题追踪器中。

        2
  •  6
  •   shanethehat    13 年前
    edittext.setKeyListener(null);
    

    这对你有帮助

        3
  •  2
  •   Lucifer phtrivier    13 年前

    用这个,对我有用

    setFocusableInTouchMode(boolean);
    
    setFocusable(boolean);
    
        4
  •  1
  •   Johnny Levai    14 年前

    我解决了这个问题,但补丁只包含在蜂窝中。这就是为什么我创建了一个小项目,它将包含我从2.1开始的版本的后端口修复。它包含对bug 2771的修复: http://code.google.com/p/android-fixes/
    您可以从SVN中检出“库”,并将其包含在项目中。然后,代替android.widget.edittext导入edu.ubbdroid.android.widget.edittext(扩展了原来的edittext),问题应该消失了:)

        5
  •  1
  •   KarolDepka    14 年前

    也许您可以选择用textview和back动态替换。但您可能需要调整字体以匹配EditText。

        6
  •  1
  •   Manoj Sharma    8 年前
    etComment.setEnabled(flag);
    etComment.setFocusable(flag);
    etComment.setFocusableInTouchMode(flag);
    if (flag) {
        etComment.requestFocus();
    }
    etComment.setFilters(new InputFilter[] { new InputFilter() {
        @Override
        public CharSequence filter(
            CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                if (!flag) {
                    return source.length() < 1 ? dest.subSequence(dstart, dend) : "";
                }
                return null;
            }
        }
    });
    

    为了所有 你可以得到它!

        7
  •  0
  •   Community CDub    8 年前

    我认为你应该能够用你自己的函数来编辑text.setOnclickListener(),如果你想编辑你的文本,可以调用super.onclickListener()。

    编辑:
    下面的链接有一些听起来更像正确的答案:
    Can we have uneditable text in edittext

        8
  •  0
  •   Community CDub    8 年前

    要获得最新答案,请检查此线程:

    How to replicate android editable false