在我的应用程序中,我有一个EditText。我希望用户只具有读访问权限而不是写访问权限。
在代码中,我设置了android:enabled="false"
。虽然EditText的背景变为黑暗,但当我点击它时,键盘会弹出,我可以更改文字。
我该怎么办? 感谢
答案 0 :(得分:212)
我认为正确的是设置android:editable="false"
。
如果您想知道为什么我的链接指向TextView
的属性,那么答案是因为EditText
继承自TextView
:
EditText是一个薄的贴面 配置自己的TextView 可编辑的。
<强>更新强>
如下面的评论中所述,editable
已弃用(since API level 3)。您应该使用inputType
(值none
)。
答案 1 :(得分:150)
使用EditText.setFocusable(false)
禁用编辑
EditText.setFocusableInTouchMode(true)
启用编辑功能;
答案 2 :(得分:55)
使用此选项禁用用户输入
android:focusable="false"
android:editable =“false”此方法已被弃用。
答案 3 :(得分:53)
您可以尝试以下方法:
private void disableEditText(EditText editText) {
editText.setFocusable(false);
editText.setEnabled(false);
editText.setCursorVisible(false);
editText.setKeyListener(null);
editText.setBackgroundColor(Color.TRANSPARENT);
}
启用EditText:
已禁用EditText:
它对我有用,希望对你有帮助。
答案 4 :(得分:23)
对于禁用修改EditText
,我认为我们可以使用focusable
或 enable
,但
答案 5 :(得分:18)
android:editable="false"
已被删除。您可以在EditText上使用InputType TYPE_NULL
像这样使用:
editText.setInputType(InputType.TYPE_NULL);
答案 6 :(得分:15)
由于android:editable="false"
已弃用
在xml
使用
android:enabled="false"
这很简单。为什么要使用更多代码?
如果你想进入java class
,你也可以通过编程方式使用
editText.setEnabled(false);
答案 7 :(得分:9)
简单地:
editText.setEnabled(false);
答案 8 :(得分:5)
我使用的是Google最新发布的材料设计库。就我而言,当我使用 android:focusable =“ false”和 android:cursorVisible =“ false”
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/to_time_input_layout"
app:endIconMode="custom"
app:endIconDrawable="@drawable/ic_clock"
app:endIconContentDescription="ToTime"
app:endIconTint="@color/colorAccent"
style="@style/OutlinedEditTextStyle"
android:hint="To Time">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/to_time_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false" />
</com.google.android.material.textfield.TextInputLayout>
答案 9 :(得分:5)
在课堂上设置以下属性:
editText.setFocusable(false);
editText.setEnabled(false);
它将按您的要求顺利运作。
答案 10 :(得分:4)
改为使用TextView
。
答案 11 :(得分:4)
禁用焦点,单击和光标可见性对我来说是成功的秘诀。
这是XML中的代码
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:clickable="false"
/>
答案 12 :(得分:4)
如果您使用android:editable="false"
,eclipse会提醒您此消息“android:editable is deprecated:使用inputType代替”。
所以,我使用android:focusable="false"
代替,它对我来说效果很好。
答案 13 :(得分:2)
YourEditText.setInputType(InputType.TYPE_NULL);
现在已弃用并使用
resolve()
答案 14 :(得分:1)
在我的情况下,如果没有,我需要我的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);
}
}
答案 15 :(得分:1)
试试这个,对我来说很好用:
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);
,或者首次<{1}} 弹出。
答案 16 :(得分:1)
如某些答案所述,如果禁用editText,他会变成灰色,如果将focus设置为false,则会显示光标。
如果您只想使用xml可以做到这一点
<YourFloatLabel
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/view_ads_search_select"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:clickable="true"/>
</YourFloatLabel>
我只是添加一个出现在editText上方的FrameLayout并将其设置为可聚焦和可单击,以使editText不能被单击。
答案 17 :(得分:1)
这将使您的编辑文本被禁用。
editText.setEnabled(false);
并通过使用
editText.setInputType(InputType.TYPE_NULL);
只会使您的Edittext 不显示,但如果它连接到物理键盘,则可以让您键入。
答案 18 :(得分:0)
不推荐使用 android:editable="false"
。相反,您需要使用 android:focusable="false"
答案 19 :(得分:0)
要禁用EditText的功能,只需使用:
buf
如果要以某种方式启用它,则可以使用:
EditText.setInputType(InputType.TYPE_NULL);
答案 20 :(得分:0)
如何实现多种程度的残疾。
editText.setShowSoftInputOnFocus(false);
和editText.setFocusable
防止EditText
显示键盘-使用某些文字书写。但是光标仍然可见,用户可以粘贴一些文本。
editText.setCursorVisible(false)
隐藏光标。不知道为什么要这么做。用户可以输入文字并粘贴。
editText.setKeyListener(null)
我觉得这种方式最方便。用户无法输入文本,但是如果您想在用户触摸时触发操作,则小部件仍可以与OnClickListener
一起使用
editText.setEnabled(false);
完全禁用EditText
。它实际上是“只读的”,用户无法在其中输入任何文本,并且OnClickListener
不能使用它。
TextEdit documentation
答案 21 :(得分:0)
您可以使用android:focusable="false"
,但也需要禁用光标
复制/粘贴功能仍然有效。
所以,使用
android:focusable="false"
android:cursorVisible="false"
答案 22 :(得分:0)
今天我仍然使用editable="false"
,还使用focusable="false"
。
我认为我们需要使EditText不可编辑的情况是因为我们想要保持其EditText样式(带有下划线,带提示等),但它接受其他输入而不是文本。例如下拉列表。
在这种用例中,我们需要EditText
可点击(因此enabled="false"
不合适)。设置focusable="false"
可以做到这一点,然而,我仍然可以长时间保持EditText并将自己的文本从剪贴板粘贴到它上面。根据您的代码和处理方式,这甚至可能导致您的应用崩溃。
所以我也使用了editable="false"
,现在一切都很好,除了警告。
答案 23 :(得分:0)
从@ Asymptote评论接受的答案,请使用:
myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);
......鲍勃是你的叔叔。
答案 24 :(得分:-1)
在您的XML代码中进行设置,即可使用。
android:focusableInTouchMode =“ false”
答案 25 :(得分:-1)
这对我有用:
机器人:可聚焦= “假”