在我的应用程序中,我有一个EditText,用户只有读访问权,没有写访问权。

在代码中,我设置android:enabled="false"。

虽然EditText的背景变成了黑色,但当我点击它时,键盘就会弹出来,我可以更改文本。

我应该设置什么来禁用EditText?


当前回答

使用TextView代替。

其他回答

使用此选项可禁用用户输入

android:focusable="false"

android:editable="false"此方法已弃用。

使用TextView代替。

您可以尝试以下方法:

 private void disableEditText(EditText editText) {
    editText.setFocusable(false);
    editText.setEnabled(false);
    editText.setCursorVisible(false);
    editText.setKeyListener(null);
    editText.setBackgroundColor(Color.TRANSPARENT); 
 }

启用EditText:

禁用EditText:

这对我有用,希望能帮到你。

我相信正确的方法是设置android:editable="false"。

如果你想知道为什么我的链接指向TextView的属性,你的答案是,因为EditText从TextView继承:

EditText是一个薄薄的贴面 配置自身为的TextView 可编辑的。

更新: 正如下面的评论中提到的,editable已弃用(从API级别3开始)。您应该使用inputType(值为none)。

试试这个,对我来说很管用:

public class CustomEdittext extends EditText {

Boolean mIsTextEditor=true;
public CustomEdittext(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
public boolean onCheckIsTextEditor() {
    // TODO Auto-generated method stub
    return mIsTextEditor;
}


@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    mIsTextEditor=false;
    Boolean mOnTouchEvent=super.onTouchEvent(event);
    mIsTextEditor=true;     
    return mOnTouchEvent;
} }

注意:你需要添加this.getWindow().setSoftInputMode(windowmanager . layoutparam . soft_input_state_always_hidden); 在您的活动上,否则键盘将在第一时间弹出。