【问题标题】:How do I set multiple input types in an EditText on Android?如何在 Android 上的 EditText 中设置多种输入类型?
【发布时间】:2012-04-04 00:28:33
【问题描述】:

我正在尝试创建一个EditText,并实现了自动大写和自动更正。我已经手动弄清楚如何添加InputFilters 以允许自动大写,尽管这仅在输入第一个字母之后有效,而且我没有运气自动更正(我试图创建一个使用 AutoText 的 InputFilter,但我不确定它是如何工作的)。理想情况下,我可以只使用 EditText.setInputType(...) 来处理所有事情,但到目前为止这还没有奏效。有没有办法做到这一点?我的失败尝试如下所示(我只是得到正常输入)。

EditText mEditText = new EditText(this);
int inputType = InputType.TYPE_CLASS_TEXT;
if (auto_capitalize) {
    inputType = mEditText.getInputType() | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS;
}
if (auto_correct) {
    inputType = mEditText.getInputType() | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
}
mEditText.setInputType(inputType);

请注意,我只对在代码中创建 EditText 的解决方案感兴趣,而不是通过 XML。

编辑

我找到了描述 TextKeyListener 的可靠新文档,但是在尝试使用它之后:

mEditText.setKeyListener(new TextKeyListener(TextKeyListener.Capitalize.CHARACTERS, true));

并使用@farble1670的思路,使用setRawInputType,以免影响KeyListeners,文字依旧没有变化。

【问题讨论】:

    标签: android android-edittext bitwise-operators input-filtering


    【解决方案1】:

    是的,看起来应该可以。但是,查看文档,

    放置在文本字段中的数据类型,用于帮助输入 方法决定如何让用户输入文本。这里的常数 对应于由 InputType 定义的那些。一般可以选择一个 单个值,尽管有些可以按照指示组合在一起。 将此属性设置为 none 以外的任何值也意味着 文本是可编辑的。

    http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType

    所以看起来一般来说,您不能期望设置两个值。上面的链接显示了哪些标志可以组合在一起。

    另外,如果你查看 android:setInputType,它会说这映射到 setRawInputType() 方法,而不是 setInputType()。您可以尝试调用setRawInputType() 而不是setInputType()

    http://developer.android.com/reference/android/widget/TextView.html#setRawInputType(int)

    【讨论】:

    • 谢谢,这让我走向了一个新的方向,我找到了TextKeyListener。唯一的问题是 - 这似乎也不起作用......
    【解决方案2】:

    希望您已找到问题的答案。答案可能会帮助那些稍后进入主题的人。因此,您可以使用|(管道)以与在 XML 中类似的方式设置多个标签。 比如:

    EditText mEditText = new EditText(this);
    mEditText.setInputType(InputTpe.TYPE_TEXT_FLAG_CAP_CHARACTERS|InputType.TYPE_TEXT_FLAG_AUTO_CORRECT);
    

    另外,根据您的situation,您可能希望使用setInputTypesetRawInputype

    【讨论】:

      【解决方案3】:

      通过 XML 可以这样设置。

      android:inputType="textMultiLine|textNoSuggestions"
      

      您只需在变量之间添加一个管道 (|)。我看到你是通过代码来做的,但我只是把它扔在那里以供参考。

      【讨论】:

      • 我的问题明确指出我对XML 解决方案不感兴趣。
      • 我在搜索时发现了您的问题,我将 XML 解决方案提供给下一个找到此问题但正在寻找 XML 解决方案的人,就像我一样......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多