如何使EditText无法在Android中通过XML进行编辑?
任何人都可以告诉我如何使EditText
无法通过XML编辑? 我试着把android:editable
设置为false
,但是
- 它被弃用; 和
- 它没有工作。
使用这个简单的代码:
textView.setKeyListener(null);
有用。
编辑:稍后添加KeyListener
,请执行以下操作
1:将按键监听器设置为textView
标签
textView.setTag(textView.getKeyListener()); textView.setKeyListener(null);
2:从标记中获取关键字侦听器并将其设置回textView
textView.setKeyListener((KeyListener) textView.getTag());
将此添加到您的EditText xml文件中:
<EditText ... android:clickable="false" android:cursorVisible="false" android:focusable="false" android:focusableInTouchMode="false"> </EditText>
它会做android:editable="false"
。 为我工作,希望它也能为你工作。
让你的Edittext是
EditText editText;
editText.setKeyListener(null);
将工作,但它只是不听密钥。
用户可以在edittext上看到一个光标。
你可以试试editText.setEnabled(false);
这意味着用户看不到光标。 简单地说它将成为TextView
。
禁用XML(一行):
android:focusable="false"
从Java重新启用,如果需要(也是一行):
editText.setFocusableInTouchMode(true);
正如在其他答案中提到的,你可以做一个setEnabled(false)
但是因为你问如何通过XML来设置它,这里是如何做到这一点。
将以下属性添加到您的EditText
:
android:enabled="false"
他们做了“可编辑”的弃用,但没有在inputType中提供相应的工作。
顺便说一句,inputType =“none”有什么作用? 据我所知,是否使用它并没有什么区别。
例如,默认的editText被认为是单行。 但是你必须select一个inputType作为单行。 如果您select“无”,它仍然是多行。
正如你所提到的android:editable已被弃用。 应该使用android:inputType =“none”来代替,但是由于bug( https://code.google.com/p/android/issues/detail?id=2854 )
但是你可以通过使用focusable来达到同样的效果。
通过XML:
<EditText ... android:focusable="false" </EditText>
从代码:
((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);
如果你想点击它,但不想编辑它,请尝试:
android:focusable="false"
如果你想在java代码中使用这一行来禁用它:
editText.setEnabled(false);
而这样做是为了:
editText.setEnabled(true);
我试图做到:
textView.setInputType( InputType.TYPE_NULL );
这应该工作,但对我来说没有。
我完成了这个代码:
textView.setKeyListener(new NumberKeyListener() { public int getInputType() { return InputType.TYPE_NULL; } protected char[] getAcceptedChars() { return new char[] {}; } });
这完美的作品。
<EditText android:id="@+id/txtDate" android:layout_width="140dp" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="10dp" android:layout_marginTop="2dp" android:clickable="false" android:cursorVisible="false" android:gravity="center" />
并使用以下内容:
txtDate.setKeyListener(null);
只需使用android:enabled="false"
。 这也会给EditText
外观,这将使它看起来不可编辑。
你可以使用android:editable="false"
但是我真的build议你使用setEnabled(false)
因为它提供了一个可视的线索给用户,该控件不能被编辑。 所有禁用的小部件都使用相同的视觉提示,一致性很好。
当我想要一个活动不专注于EditText,也不显示键盘单击时,这是我的工作。
将属性添加到主布局
android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"
然后EditText字段
android:focusable="false" android:focusableInTouchMode="false"
这里是一个例子:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_home" android:background="@drawable/bg_landing" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="0dp" android:paddingLeft="0dp" android:paddingRight="0dp" android:paddingTop="@dimen/activity_vertical_margin" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" tools:context="com.woppi.woppi.samplelapp.HomeActivity"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:inputType="textPersonName" android:ems="10" android:id="@+id/fromEditText" android:layout_weight="1" android:hint="@string/placeholder_choose_language" android:textColor="@android:color/white" android:textColorHint="@android:color/darker_gray" android:focusable="false" android:focusableInTouchMode="false" android:onClick="onSelectFromLanguage" /> </RelativeLayout>
我已经尝试了以下内容:
codeEditText.setInputType(InputType.TYPE_NULL); this.codeEditText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { pickCode(); } } }); this.codeEditText.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { pickCode(); } });
但问题是,如果编辑文本是表单中的第一个,那么它将获得焦点,而启动新活动的pickCode()代码将立即被调用。 所以我修改了代码如下,它似乎工作得很好(除了我不能把重点放在文本编辑,但我不需要):
itemCodeEditText.setFocusable(false); this.itemCodeEditText.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { pickItem(); } });
最好的祝福,
评论欢迎,
约翰·戈奇
除了@mahe madi你也可以试试这个
editText.setEnabled(false); editor.setTextColor(Color.BLACK);
此方法将隐藏光标,失去焦点,更重要的是将文本颜色设置为像TextView一样的黑色。
而要恢复到editText,只需执行此操作即可获得EditText的所有属性。
editText.setEnabled(true);
希望能帮助到你 :)
如果我想编辑,我使用EditText.setFocusable(false)
并再次设置为true。
android:editable被弃用,所以使用inputType来代替。
<EditText android:id="@+id/editText_x" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="70" android:inputType="none" android:hint="@string/enter_x" />
尝试这个 :
android:inputType="none"
这种方式做了我的工作,我可以select和复制到剪贴板,但我不能修改或粘贴。
android:enable="true" android:textIsSelectable="true" android:inputType="none"
这个组合为我工作:
<EditText ... > android:longClickable="false" android:cursorVisible="false" android:focusableInTouchMode="false" </EditText>
我遇到了同样的问题,但经过观察,我发现android:editable="false"
只有在inputtypes( android:inputType="ANY_VALUE"
) 没有在Edittext中给出。
从EditText中删除inputType并使用editable = false,其工作正常。
尝试
.setInputType(InputType.TYPE_NULL);
试试这个代码。 它在我的项目中工作,所以它会在你的项目中工作。
android:editable="false"