如何在Android中通过XML编辑EditText?

问题描述 投票:283回答:25

任何人都可以告诉我如何使EditText不能通过XML编辑?我尝试将android:editable设置为false,但是

  1. 它已被弃用;和
  2. 它不起作用。
android android-edittext
25个回答
389
投票

使用这个简单的代码:

textView.setKeyListener(null);

有用。

编辑:要稍后添加KeyListener,请执行以下操作

1:将关键监听器设置为textView的标签

textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);

2:从标签获取关键监听器并将其设置回textView

textView.setKeyListener((KeyListener) textView.getTag());

7
投票
<EditText ... >
    android:longClickable="false"
    android:cursorVisible="false"
    android:focusableInTouchMode="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" />

7
投票

只需使用txtDate.setKeyListener(null); 。这也将给android:enabled="false"一个外观,使它看起来不可编辑。


6
投票

如果你想在java代码中执行它,只需使用此行禁用它:

EditText

这样就可以了:

editText.setEnabled(false);

5
投票

我试着这样做:

editText.setEnabled(true);

这应该工作,但对我来说它没有。

我完成了这段代码:

textView.setInputType( InputType.TYPE_NULL );

哪作得很好。


3
投票

您可以使用textView.setKeyListener(new NumberKeyListener() { public int getInputType() { return InputType.TYPE_NULL; } protected char[] getAcceptedChars() { return new char[] {}; } }); 但我真的建议您使用android:editable="false",因为它为用户提供了无法编辑控件的视觉线索。所有禁用的小部件都使用相同的视觉提示,并且一致性良好。


3
投票

当我希望活动不关注EditText并且在点击时也不显示键盘时,这对我有用。

将属性添加到主布局

setEnabled(false)

然后是EditText字段

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

这是一个例子:

android:focusable="false"
android:focusableInTouchMode="false"

2
投票

我尝试过以下方法:

<?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>

但问题是,如果编辑文本是表单中的第一个,那么它将获得焦点,并立即调用启动新活动的pickCode()代码。所以我修改了如下代码,它似乎工作得很好(除了我不能把重点放在文本编辑上,但我不需要):

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();

  }

});

最好的祝福,

欢迎评论,

约翰戈切


2
投票

除了@mahe madi,你也可以尝试这个

itemCodeEditText.setFocusable(false);

this.itemCodeEditText.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {

    pickItem();

  }

});

此方法将隐藏光标,失去焦点,更重要的是将文本颜色设置为黑色,表现得像TextView。

要恢复返回editText,只需执行此操作即可获得EditText的所有属性。

editText.setEnabled(false);
editor.setTextColor(Color.BLACK);

希望能帮助到你 :)


2
投票

如果我想编辑,我使用editText.setEnabled(true); 并再次设置为true。


2
投票

试试这个 :

EditText.setFocusable(false)

379
投票

将其添加到EditText xml文件中:

<EditText ...
        android:clickable="false" 
        android:cursorVisible="false" 
        android:focusable="false" 
        android:focusableInTouchMode="false">
</EditText>

它将起到与android:editable="false"相同的效果。为我工作,希望它也适合你。


2
投票

这样做了我的工作,我可以选择并复制到剪贴板,但我无法修改或粘贴。

android:inputType="none"

2
投票
android:enable="true"
android:textIsSelectable="true"
android:inputType="none"

“longClickable”属性禁用长按操作,导致“粘贴”和/或“全选”选项显示为工具提示。


1
投票

android:editable已弃用,因此请改用inputType。

android:focusable="false"

android:clickable="false"

android:longClickable="false"

1
投票

我遇到了同样的问题但是在观察之后我发现 <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" /> 仅在Edittext中没有给出inputtype(android:editable="false")时才起作用。

从EditText中删除inputType并使用editable = false,它的工作正常。


-1
投票

尝试

android:inputType="ANY_VALUE"

-10
投票

试试这个代码。它在我的项目中工作,因此它将在您的项目中工作。

.setInputType(InputType.TYPE_NULL);

54
投票

让你的Edittext成为

EditText editText;

editText.setKeyListener(null);

会工作,但它只是没有听到钥匙。

用户可以在edittext上看到光标。

你可以尝试editText.setEnabled(false);

这意味着用户无法看到光标。简单地说它将成为qazxsw poi。


27
投票

正如其他答案中所提到的,你可以做一个TextView但是因为你问的是如何通过XML设置它,这里是如何做到的。

将以下属性添加到setEnabled(false)

EditText

24
投票

禁用XML(一行):

android:enabled="false"

如果需要,也可以从Java重新启用(也是一行):

 android:focusable="false"

15
投票

他们将“可编辑”弃用,但没有在inputType中提供相应的工作。

顺便说一下,inputType =“none”有效吗?就我看来,使用与否使用并没有任何区别。

例如,默认的editText被称为单行。但是你必须选择一个inputType作为单行。如果选择“无”,它仍然是多行的。


13
投票

正如你提到的android:editable已被弃用。应该使用android:inputType =“none”,但由于bug(editText.setFocusableInTouchMode(true); )它不起作用

但是你可以通过使用可聚焦来实现同样的目的。

XML XML:

https://code.google.com/p/android/issues/detail?id=2854

来自代码:

<EditText ...
        android:focusable="false" 
</EditText>

12
投票

如果要单击它,但不想编辑它,请尝试:

((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);

11
投票

这个组合对我有用:

        android:focusable="false"
© www.soinside.com 2019 - 2024. All rights reserved.