如何使EditText无法在Android中通过XML进行编辑?

任何人都可以告诉我如何使EditText无法通过XML编辑? 我试着把android:editable设置为false ,但是

  1. 它被弃用; 和
  2. 它没有工作。

使用这个简单的代码:

 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"