如何在Android的EditText中设置多个输入类型?

18

我试图创建一个已实现自动大写和自动纠正的EditText。我已经手动找出如何添加InputFilter以允许自动大写,但这仅在输入第一个字母后才起作用,并且我尝试使用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,但文本仍然没有变化。

3个回答

41

通过 XML,可以这样设置。

android:inputType="textMultiLine|textNoSuggestions"
你只需要在变量之间加上一条竖线 (|)。我看到你是通过代码实现的,但我只是为了参考而提出这个建议。

1
我的问题明确表示我不感兴趣使用XML解决方案。 - Phil
5
我在搜索时发现了你的问题,我正在为下一个遇到此问题的人提供XML解决方案,但我也像你一样在寻找XML解决方案... - f1vefour

14

我希望你已经找到了问题的答案。这个答案可能会帮助那些以后来到这个主题的人。因此,你可以使用|(管道符号)以类似于在XML中设置多个标签的方式设置多个标签。

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

此外,根据您的情况,您可能需要使用setInputTypesetRawInputype


3

是的,看起来应该可以。然而,查看文档后发现:

放置在文本字段中的数据类型,用于帮助输入法决定如何让用户输入文本。这里的常量对应于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。唯一的问题是 - 它似乎也不起作用... - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接