有谁能告诉我如何通过XML使EditText
无法编辑?我尝试将android:editable
设置为false
,但
答案 0 :(得分:385)
使用这个简单的代码:
textView.setKeyListener(null);
有效。
修改:要稍后添加KeyListener
,请执行以下操作
1:将关键监听器设置为textView
textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);
2:从标记中获取关键侦听器并将其设置回textView
textView.setKeyListener((KeyListener) textView.getTag());
答案 1 :(得分:374)
将其添加到EditText xml文件中:
<EditText ...
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false">
</EditText>
它将与android:editable="false"
具有相同的效果。为我工作,希望它也适合你。
答案 2 :(得分:54)
让你的Edittext
EditText editText;
editText.setKeyListener(null);
会起作用,但它只是不听钥匙。
用户可以在edittext上看到光标。
您可以尝试editText.setEnabled(false);
这意味着用户无法看到光标。简单地说它将成为TextView
。
答案 3 :(得分:26)
正如其他答案中所提到的,你可以做一个setEnabled(false)
但是因为你问的是如何通过XML设置它,这里是如何做到的。
将以下属性添加到EditText
:
android:enabled="false"
答案 4 :(得分:24)
禁用XML(一行):
android:focusable="false"
从Java重新启用,如果需要(也是一行):
editText.setFocusableInTouchMode(true);
答案 5 :(得分:15)
他们不推荐使用“editable”,但没有在inputType中提供相应的工作。
顺便问一下,inputType =“none”有效吗?在我看来,使用或不使用它并没有任何区别。
例如,默认的editText被称为单行。但是你必须选择一个inputType作为单行。如果你选择“无”,它仍然是多行的。
答案 6 :(得分:13)
正如你提到的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);
答案 7 :(得分:12)
如果您想点击它,但又不想编辑它,请尝试:
android:focusable="false"
答案 8 :(得分:11)
这种组合对我有用:
<EditText ... >
android:longClickable="false"
android:cursorVisible="false"
android:focusableInTouchMode="false"
</EditText>
答案 9 :(得分:7)
<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);
答案 10 :(得分:6)
只需使用EditText
即可。这也会使 Base& add(Base &other)
{
n += other.n;
return *this;
}
显示出来,使其看起来不可编辑。
答案 11 :(得分:6)
如果你想在java代码中执行它,只需使用此行禁用它:
editText.setEnabled(false);
这是为了启用它:
editText.setEnabled(true);
答案 12 :(得分:5)
我试着这样做:
textView.setInputType( InputType.TYPE_NULL );
哪个应该有效,但对我来说却没有。
我完成了这段代码:
textView.setKeyListener(new NumberKeyListener() {
public int getInputType() {
return InputType.TYPE_NULL;
}
protected char[] getAcceptedChars() {
return new char[] {};
}
});
完美无缺。
答案 13 :(得分:3)
你可以使用android:editable="false"
但我真的会建议你
使用setEnabled(false)
,因为它为用户提供了一个视觉线索
控件无法编辑。所有人都使用相同的视觉提示
禁用小部件和一致性很好。
答案 14 :(得分:3)
当我希望活动不关注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>
答案 15 :(得分:2)
这样做了我的工作,我可以选择并复制到剪贴板,但我无法修改或粘贴。
android:enable="true"
android:textIsSelectable="true"
android:inputType="none"
答案 16 :(得分:2)
android:focusable="false"
android:clickable="false"
android:longClickable="false"
“ longClickable”属性禁用长按动作,这些动作会导致“粘贴”和/或“全选”选项显示为工具提示。
答案 17 :(得分:2)
如果我想编辑,我会使用EditText.setFocusable(false)
并再次设置为true。
答案 18 :(得分:2)
试试这个:
android:inputType="none"
答案 19 :(得分:2)
除了@mahe madi 你也可以试试这个
editText.setEnabled(false);
editor.setTextColor(Color.BLACK);
此方法将隐藏光标,失去焦点,更重要的是将文本颜色设置为黑色,表现得像TextView。
要恢复返回editText,只需执行此操作即可获得EditText的所有属性。
editText.setEnabled(true);
希望它有助于:)
答案 20 :(得分:2)
我尝试了以下内容:
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();
}
});
最诚挚的问候,
欢迎评论,
John Goche
答案 21 :(得分:1)
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" />
答案 22 :(得分:1)
我遇到了同样的问题,但经过观察后我发现android:editable="false"
仅在编辑文本中给出inputtype(android:inputType="ANY_VALUE"
)不时才有效。
从EditText中删除inputType并使用editable = false,其工作正常。
答案 23 :(得分:1)
请试试这个!,它可能会帮助一些人
stop
答案 24 :(得分:0)
我通过对话框解决了这个问题。
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();
}
});
答案 25 :(得分:0)
简短答案:
我使用了android:focusable="false"
,它起作用了。点击监听功能现在也可以使用。
答案 26 :(得分:0)
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
}
}
}
答案 27 :(得分:-1)
尝试
{
"version": "0.1.0",
"command": "${workspaceRoot}/run_tasks.bat",
"isShellCommand": true,
"isWatching": true,
"showOutput": "always",
"args": [],
"tasks": [
{
"taskName": "build",
"isBuildCommand": true,
"isWatching": true,
"showOutput": "always"
}
}
答案 28 :(得分:-10)
试试这段代码。它在我的项目中工作,因此它可以在你的项目中工作。
android:editable="false"