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

Sam*_*562 18 java android android-edittext

我正在使用EditText.是否可以将文本的一部分编辑为不可编辑,其余部分可编辑EditText

Jos*_*ger 16

你可以用

editText.setFocusable(false);
Run Code Online (Sandbox Code Playgroud)

要么

editText.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)

虽然禁用EditText当前不会忽略来自屏幕键盘的输入(我认为这是一个错误).

根据应用程序,最好使用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) : "";
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

另见这个问题.

  • 对于显示/隐藏密码字段,如果使用此技巧然后更改输入类型(`editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)`),则清除文本内容.解决方法是在更改输入类型时临时将过滤器设置为空数组. (2认同)

Ulr*_*ler 2

您可以实现一个 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) {}
}
Run Code Online (Sandbox Code Playgroud)
    TextChangedListener tcl = new TextChangedListener();
    my_editable.addTextChangedListener(tcl);
Run Code Online (Sandbox Code Playgroud)