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

时间:2012-03-19 13:58:19

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

我正在尝试创建一个具有自动大写和自动更正功能的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的想法,为了不影响KeyListener,文本仍然没有变化。

3 个答案:

答案 0 :(得分:34)

通过XML,它会像这样设置。

android:inputType="textMultiLine|textNoSuggestions"

您只需在变量之间添加管道(|)。我看到你是通过代码完成的,但我只是把它扔到那里作为参考。

答案 1 :(得分:7)

我希望你找到了问题的答案。答案可能会帮助那些后来进入线程的人。因此,您可以使用|(管道)以与XML相似的方式设置多个标记。 类似的东西:

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

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

答案 2 :(得分: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