谁能告诉我如何EditText
通过XML 进行不可编辑?我尝试设置android:editable
为false
,但
- 不推荐使用;和
- 它没有用。
谁能告诉我如何EditText
通过XML 进行不可编辑?我尝试设置android:editable
为false
,但
Answers:
使用以下简单代码:
textView.setKeyListener(null);
有用。
编辑:要KeyListener
稍后添加,请执行以下操作
1:将关键侦听器设置为的标签 textView
textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);
2:从标签获取关键侦听器并将其设置回 textView
textView.setKeyListener((KeyListener) textView.getTag());
setFocusable()
因为文档说如果更改默认实现,则可能会更改默认值。
将此添加到您的EditText xml文件中:
<EditText ...
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false">
</EditText>
效果与相同android:editable="false"
。为我工作,希望它也对您有用。
TextInputLayout
让您的Edittext为
EditText editText;
editText.setKeyListener(null);
可以工作,但只是不听键。
用户可以在编辑文本上看到光标。
你可以试试 editText.setEnabled(false);
这意味着用户看不到光标。简单地说,它将成为TextView
。
如其他答案中所述,您可以执行以下操作,setEnabled(false)
但是由于您正在询问如何通过XML进行设置,因此请执行以下操作。
将以下属性添加到您的EditText
:
android:enabled="false"
enabled
不被弃用。editable
是。
他们弃用了“可编辑”功能,但没有在inputType中提供相应的工作方式。
顺便说一句,inputType =“ none”有什么作用吗?就我所知,是否使用它没有任何区别。
例如,默认的editText被称为单行。但是您必须选择一个inputType使其为单行。而且,如果您选择“无”,它仍然是多行。
这种组合对我有用:
<EditText ... >
android:longClickable="false"
android:cursorVisible="false"
android:focusableInTouchMode="false"
</EditText>
如您所述,不推荐使用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);
只需使用 android:enabled="false"
。这也会给带来外观,EditText
使其看起来不可编辑。
<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);
当我希望某个活动不专注于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"
但我真的建议您使用,setEnabled(false)
因为它为用户提供了视觉提示,表明无法进行编辑。所有禁用的小部件都使用相同的视觉提示,并且一致性良好。
我尝试了以下方法:
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();
}
});
最好的祝福,
欢迎发表评论,
约翰·高奇
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" />
我用一个对话框解决这个问题。
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"
,而且效果很好。点击监听现在也可以使用。
尝试
.setInputType(InputType.TYPE_NULL);
试试这个代码。它正在我的项目中工作,因此它将在您的项目中工作。
android:editable="false"