Android EditText inputType="none" 不起作用,变成“textMultiLine”

Posted

技术标签:

【中文标题】Android EditText inputType="none" 不起作用,变成“textMultiLine”【英文标题】:Android EditText inputType="none" doesn't work, becomes "textMultiLine" 【发布时间】:2012-04-29 08:47:33 【问题描述】:

android 1.6(4) 和 2.3.3(10) 上测试。

我制作了一个简约的测试应用程序来演示这一点,它所做的只是加载 xml:

setContentView(R.layout.main); 

xml 是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical" >

<TextView
    android:layout_
    android:layout_
    android:text="@string/hello" />

<EditText
    android:id="@+id/editText1"
    android:layout_
    android:layout_
    android:inputType="none"
    android:ems="10" >

</EditText>

问题:

当设置inputType="none"在执行过程中实际输入类型变成textMultiLine(0x00020001)时,我已经用调试器检查过了。

另一方面,如果我使用inputType="text",它会按预期工作。

这是 Android 中的错误吗?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题:通过 xml 定义输入类型不起作用。

然后,为了修复它,我以编程方式设置输入类型:

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState)
    
    ...
    editText1= (EditText) super.getActivity().findViewById(R.id.editText1);
    editText1.setInputType(InputType.TYPE_NULL);    // none...
    ...
    

这对我有用。

【讨论】:

更好用setInputType(InputType.TYPE_NULL) 这行得通,但为了让点击监听器触发我必须点击两次。想法?我已经尝试将 focusable 和 focusableInTouchMode 设置为 false【参考方案2】:

设置 InputType="none" xml 不起作用,但如果您使用数据绑定,那么您可以使用绑定语法来设置输入类型。

导入类型..

<data> <import type="android.text.InputType" /> </data>

然后绑定值

<EditText android:id="@+id/edit_text" android:inputType="@InputType.TYPE_NULL" />

【讨论】:

使用材料库的TextInputEditText,将inputType 设置为noneeditable 设置为false 没有帮助,但这工作正常。第一个答案是在 Java/Kotlin 中执行此操作。 这行得通,但为了让点击监听器触发我必须点击两次。想法?我已经尝试将 focusable 和 focusableInTouchMode 设置为 false【参考方案3】:

据我所知,这是 android 代码中的一个错误。请参阅此内容 - How to make EditText not editable through XML in Android?

GalDude33 建议-

    android:clickable="false" 
    android:cursorVisible="false" 
    android:focusable="false" 
    android:focusableInTouchMode="false"

【讨论】:

【参考方案4】:

使用android:editable="false"。尽管它已被弃用,但它在 inputType 不被弃用时仍然有效。

【讨论】:

是的,你是真的。这正是正确的作品。因为 inputType="none" 是废话更新。 其实这是正确的答案,因为 EditText 默认是 editable = true 并且 inputType 在这种情况下被更改为 TEXT ,在这种情况下它不关心“none”,因为这也是默认的价值。请参阅 TextView 的代码 `` else if (inputType != EditorInfo.TYPE_NULL) ... ... else if (editable) createEditorIfNeeded(); mEditor.mKeyListener = TextKeyListener.getInstance(); mEditor.mInputType = EditorInfo.TYPE_CLASS_TEXT; ``` @azwar_akbar 是的,你是对的。 inputType="none" 对任何人都不起作用。您必须使用 InputType.TYPE_NULL 在代码中以编程方式设置它,或者使用 xml 中已弃用的 android:editable="false" 属性【参考方案5】:

使用这个

 textView.setKeyListener(null);

【讨论】:

您先生,是我的英雄。我尝试了上面所有其他建议的解决方案以及其他一些解决方案,但这是一件很美的事情。除此以外,所有其他方法都需要权衡取舍。 如何重新启用?【参考方案6】:

像这样设置 .xml 是可行的,但是,我不得不添加另一行,因为光标是可见的。

android:focusable="false"
android:cursorVisible="false" 

奇怪的是,即使在 2 年后仍然存在这个“错误”,而且折旧的方法比建议的方法效果更好。

使用它也可以,但在这种情况下您必须编辑背景颜色,除非您希望颜色不同。

android:enabled="false"

【讨论】:

【参考方案7】:

以下代码有效:

使用android:enabled="false"

【讨论】:

以上是关于Android EditText inputType="none" 不起作用,变成“textMultiLine”的主要内容,如果未能解决你的问题,请参考以下文章

浅谈EditText控件的inputType类型

Edittext输入类型

Android中使用EditText时设定inputType的说明

Android中EditText的InputType

EditText中inputType详解

EditText常用属性