在android中禁用EditText
在我的应用程序中,我有一个EditText。 我想用户只是读访问不写访问。 在代码中,我设置了android:enabled="false"
。 尽pipeEditText的背景变成了黑暗,但当我点击它时,键盘popup,我可以改变文字。
我该怎么办? 谢谢
我相信正确的是设置android:editable="false"
。
如果你想知道为什么我的链接指向TextView
的属性,你的答案是因为EditText
inheritance自TextView
:
EditText是TextView的一个薄薄的单板,它可以自己configuration为可编辑的。
更新:
正如在下面的评论中提到的那样, editable
已被弃用( 从API级别3开始 )。 你应该改为使用inputType
(值为none
)。
使用EditText.setFocusable(false)
禁用编辑
EditText.setFocusableInTouchMode(true)
启用编辑;
使用这个来禁用用户input
android:focusable="false"
android:editable =“false”这个方法是弃用的。
你可以尝试下面的方法:
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"
被depricated.You可以在EditText上使用InputType TYPE_NULL
像这样使用:
editText.setInputType(InputType.TYPE_NULL);
只是:
editText.setEnabled(false);
改用TextView
。
如果你使用android:editable="false"
,eclipse会提醒你这个消息“android:editable is deprecated:Use inputType instead”。
所以,我使用android:focusable="false"
代替它,它对我来说很好。
在下面的属性中设置:
editText.setFocusable(false); editText.setEnabled(false);
它会按照你的要求顺利运行。
正如android:editable="false"
已弃用
使用
android:enabled="false"
其简单。 为什么要使用更多的代码
试试这个,对我来说工作得很好:
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.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
在您的活动或否则键盘将在第一时间popup。
在我的情况下,我需要我的EditText
滚动文本,如果没有。 当其禁用时,行数超过maxLines
。 这个实现对我来说是完美的。
private void setIsChatEditTextEditable(boolean value) { if(value) { mEdittext.setCursorVisible(true); mEdittext.setSelection(chat_edittext.length()); // use new EditText(getApplicationContext()).getKeyListener()) if required below mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener()); } else { mEdittext.setCursorVisible(false); mEdittext.setKeyListener(null); } }
从@ Asymptote对接受的答案的评论,请使用:
myEditText.setEnabled(false); myEditText.setInputType(InputType.TYPE_NULL);
鲍勃是你的叔叔
今天我仍然使用editable="false"
,但也有focusable="false"
。
我认为我们需要编辑EditText的情况是不可编辑的,因为我们希望保留EditText样式(使用下划线和提示等),但它接受其他input而不是文本。 例如下拉列表。
在这种用例中,我们需要让EditText
可点击(因此enabled="false"
是不合适的)。 设置focusable="false"
做这个技巧,但是, 我仍然可以长时间保持EditText,并从剪贴板粘贴我自己的文本 。 根据你的代码和处理,甚至可能会崩溃你的应用程序。
所以我也使用editable="false"
,现在一切都很好,除了警告。
这适用于我:
机器人:可聚焦=“假”