摩托罗拉Bionic - 输入类型textPersonName和textCapWords不起作用

时间:2013-02-28 17:22:25

标签: android input android-softkeyboard

我无法在我的应用中获得EditText字段,以便在Droid Bionic上实际使用inputType =“textCapWords”或“textPersonName”。我测试的其他手机似乎没问题。大写输入类型似乎都不起作用。我也尝试了弃用的大写属性。并以编程方式设置。

还有其他人遇到过这个问题吗?除了使用TextWatcher实现自定义功能之外的任何建议吗?

<EditText
        android:id="@+id/last_name_editor"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/last_name"
        android:inputType="textCapWords"/>

5 个答案:

答案 0 :(得分:5)

您可以查看设备键盘设置。在某些设备(Samsung Note 2)中,它们会提供自动资本化检查/联合检查选项。

答案 1 :(得分:3)

对于仍然面临此问题的任何人来说,这是TextWatcher方式:

TextWatcher capitalizeTW = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        try{
            String inputString = ""+YOUR_TEXT_VIEW.getText().toString();
            String firstLetterCapString = WordUtils.capitalize(inputString);
            if(!firstLetterCapString.equals(""+YOUR_TEXT_VIEW.getText().toString())){
                YOUR_TEXT_VIEW.setText(""+firstLetterCapString);
                YOUR_TEXT_VIEW.setSelection(YOUR_TEXT_VIEW.getText().length());
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
};

//将TextWatcher添加到TextView

YOUR_TEXT_VIEW.addTextChangedListener(capitalizeTW);

// WordUtils

public final class WordUtils {

private WordUtils(){

}

public static String capitalize(String str) {
    return capitalize(str, (char[]) null);
}

public static String capitalize(String str, char... delimiters) {
    int delimLen = delimiters == null ? -1 : delimiters.length;
    if (!TextUtils.isEmpty(str) && delimLen != 0) {
        char[] buffer = str.toCharArray();
        boolean capitalizeNext = true;

        for (int i = 0; i < buffer.length; ++i) {
            char ch = buffer[i];
            if (isDelimiter(ch, delimiters)) {
                capitalizeNext = true;
            } else if (capitalizeNext) {
                buffer[i] = Character.toTitleCase(ch);
                capitalizeNext = false;
            }
        }

        return new String(buffer);
    } else {
        return str;
    }
}

private static boolean isDelimiter(char ch, char[] delimiters) {
    if (delimiters == null) {
        return Character.isWhitespace(ch);
    } else {
        char[] arr$ = delimiters;
        int len$ = delimiters.length;

        for (int i$ = 0; i$ < len$; ++i$) {
            char delimiter = arr$[i$];
            if (ch == delimiter) {
                return true;
            }
        }

        return false;
    }
}
}

我希望这会有所帮助。

答案 2 :(得分:1)

可以尝试一下......为我工作......

android:inputType="textCapWords"

或者

android:inputType="textCapSentences"

或者

android:inputType="textCapWords"

对于 Samsung S5 / S7 ,在名为“自动大写”的设置中有其他设置,可以在Caps中制作第一个租船人。

如果设置已关闭,则需要选择在Caps

中键入第一个字符

答案 3 :(得分:0)

要么这是我特有的问题,要么似乎没有人有解决方案。使用TextWatcher解决方案。如果有其他人提出解决方案,将会改变这一点。

答案 4 :(得分:0)

我遇到了同样的问题。由于我使用移动设备编写了一些代码,因此不需要大写,因此我在键盘和输入设置中禁用了自动大写。这是造成问题的原因。所以我启用了它,并且能够实现textCapWords效果。