我们可以在edittext中有不可编辑的文本

问题描述:

我正在使用EditText。是否有可能让文本的一部分不可编辑,其余部分可以在同一个EditText中编辑?我们可以在edittext中有不可编辑的文本

您可以实现一个TextChangedListener,您可以确保文本的这些部分不会得到deleted/overwritten

class TextChangedListener implements TextWatcher { 
    public void afterTextChanged(Editable s) { 
       makeSureNothingIsDeleted(); 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

    public void onTextChanged(CharSequence s, int start, int before, int count) {} 
} 

TextChangedListener tcl = new TextChangedListener(); 
    my_editable.addTextChangedListener(tcl); 

你可以使用

editText.setFocusable(false);

editText.setEnabled(false);

虽然禁用EditText当前不忽略屏幕上的键盘输入(我认为这是一个bug)。

根据应用的不同,可能是更好的使用InputFilter是拒绝所有的变化:

editText.setFilters(new InputFilter[] { 
    new InputFilter() { 
     public CharSequence filter(CharSequence src, int start, 
      int end, Spanned dst, int dstart, int dend) { 
      return src.length() < 1 ? dst.subSequence(dstart, dend) : ""; 
     } 
    } 
});

另见this问题。

+2

对于显示/隐藏密码字段,如果使用此技巧,然后更改输入类型(`editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)`),则会清除文本内容。解决方法是在更改输入类型时临时将筛选器设置为空数组。 – 2010-11-11 09:28:00