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

Java 我们可以在edittext中有不可编辑的文本吗,java,android,android-edittext,Java,Android,Android Edittext,我正在使用EditText。是否可以在同一个EditText中有一部分文本不可编辑,其余部分可编辑?您可以实现一个TextChangedListener,确保文本的这些部分不会被删除/覆盖 class TextChangedListener implements TextWatcher { public void afterTextChanged(Editable s) { makeSureNothingIsDeleted(); } pu

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

您可以实现一个TextChangedListener,确保文本的这些部分不会被删除/覆盖

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) {}
}

你可以用

editText.setFocusable(false);

尽管禁用
EditText
当前不会忽略屏幕键盘的输入(我认为这是一个bug)

根据应用程序的不同,最好使用拒绝所有更改的:

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) : "";
        }
    }
});
editText.setFilters(新的InputFilter[]{
新的InputFilter(){
公共CharSequence筛选器(CharSequence src,int start,
int end、跨距dst、int dstart、int dend){
返回src.length()<1?dst.subSequence(dstart,dend):“”;
}
}
});

另请参见问题。

有关显示/隐藏密码字段,如果您使用此技巧,然后更改输入类型(
editText.setInputType(InputType.type_CLASS_text | InputType.type_text_VARIATION_VISIBLE_password)
)。解决方法是在更改输入类型时将过滤器临时设置为空数组。
editText.setEnabled(false);
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) : "";
        }
    }
});