谁能告诉我如何使一个EditText不可编辑通过XML?我尝试将android:editable设置为false,但是
EditText
android:editable
false
他们弃用了“可编辑的”,但没有在inputType中提供相应的工作。
顺便说一下,inputType="none"有什么影响吗?在我看来,用不用它没有任何区别。
例如,默认的editText是单行的。但是您必须选择一个inputType,使其为单行。如果你选择“none”,它仍然是多行。
我试着这样做:
textView.setInputType( InputType.TYPE_NULL );
这应该有用,但对我来说没用。
我完成了下面的代码:
textView.setKeyListener(new NumberKeyListener() { public int getInputType() { return InputType.TYPE_NULL; } protected char[] getAcceptedChars() { return new char[] {}; } });
这很完美。
使用这段简单的代码:
textView.setKeyListener(null);
它的工作原理。
编辑:若稍后要添加KeyListener,请执行以下操作
KeyListener
1:设置键监听器为textView标签
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"相同。对我有用,希望对你也有用。
android:editable="false"
让你的编辑文本
EditText editText;
editText.setKeyListener(null);
会起作用,但就是听不到按键。
用户可以在编辑文本上看到光标。
你可以试试editText.setEnabled(false);
editText.setEnabled(false);
这意味着用户看不到游标。简单地说,它将成为TextView。
TextView
我试过以下几种方法:
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()代码,用于启动一个新活动 直接调用。所以我修改代码如下,它似乎 工作得很好(除了我不能将焦点设置在文本编辑上,但是 I don't need to):
itemCodeEditText.setFocusable(false); this.itemCodeEditText.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { pickItem(); } });
最好的问候,
我们欢迎评论,
约翰Goche
<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:editable已被弃用。android:inputType="none"应该被用来代替,但由于一个错误它不能工作(https://code.google.com/p/android/issues/detail?id=2854)
但是你可以通过使用focusable来达到同样的效果。
通过XML:
<EditText ... android:focusable="false" </EditText>
从代码:
((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);
除了@mahe madi 你也可以试试这个
editText.setEnabled(false); editor.setTextColor(Color.BLACK);
这个方法将隐藏光标,失去焦点,更重要的是设置文本颜色为黑色,就像TextView一样。
要恢复回editText,只需这样做即可获得editText的所有属性。
editText.setEnabled(true);
希望能有所帮助。
setEnabled(false)
如果你想在java代码中这样做,只需使用这一行来禁用它:
这是为了启用它:
disable from XML(一行):
android:focusable="false"
从Java重新启用,如果需要(也是一行):
editText.setFocusableInTouchMode(true);
正如在其他回答中提到的,你可以做一个setEnabled(false),但因为你问如何通过XML设置它,这里是如何做的。
在EditText中添加以下属性:
android:enabled="false"
我使用EditText.setFocusable(false)并再次设置true如果我想编辑。
EditText.setFocusable(false)
android:可编辑已弃用,所以改用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"
试一试
.setInputType(InputType.TYPE_NULL);
如果你想点击它,但不想编辑它,试试:
只需使用android:enabled="false"即可。这也会给EditText一个外观,使它看起来不可编辑。
这样做的工作为我,我可以选择和复制到剪贴板,但我不能修改或粘贴。
android:enable="true" android:textIsSelectable="true" android:inputType="none"
当我想要一个活动不关注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>
我也遇到过同样的问题,但经过观察,我发现android:editable="false"只在inputtype (android:inputType="ANY_VALUE")为Edittext中给出的不时才能工作。
android:inputType="ANY_VALUE"
从EditText中删除inputType并使用editable = false,其工作正常。
这个组合对我很有效:
<EditText ... > android:longClickable="false" android:cursorVisible="false" android:focusableInTouchMode="false" </EditText>
我用一个对话框来解决这个问题。
AlertDialog dialog; EditText _editID; TextView _txtID; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_principal); _txtID = (TextView) findViewById(R.id._txtID); dialog = new AlertDialog.Builder(this).create(); _editID = new EditText(this); _editID.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED); dialog.setTitle("Numero do Registro:"); dialog.setView(_editID); dialog.setButton(DialogInterface.BUTTON_POSITIVE, "IR", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { _txtID.setText(_editID.getText()); toId(Integer.parseInt((_editID.getText().toString()))); } }); dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "CANCELAR", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); _txtID.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { _txtID.setText("_editID.getText()"); //_editID.setText(""); dialog.show(); } });
< >强简短的回答: 我使用android:focusable="false",它工作。
Kotlin扩展选项:
fun AppCompatAutoCompleteTextView.setEditable(editable: Boolean) { if (!editable) { this.tag = this.keyListener this.keyListener = null } else { if(this.tag is KeyListener) { this@setEditable.keyListener = this@setEditable.tag as KeyListener } } }
请试试这个!,它可能会帮助一些人
<EditText android:enabled="false" android:textColor="#000000"/>
你可以通过以下方法在edittext和editable之间切换:
public void toggleEditableOfEditText(EditText editText){ if (editText.getKeyListener() != null) { editText.setTag(editText.getKeyListener()); editText.setKeyListener(null); } else { editText.setKeyListener((KeyListener) editText.getTag()); } }
然后使用这个方法使edittext可编辑或不可编辑:
toggleEditableOfEditText(editText);