7

DroidBionicでinputType="textCapWords"または"textPersonName"を実際に操作するためのEditTextフィールドをアプリで取得できません。私がテストした他の電話は問題ないようです。大文字のinputTypesはどれも機能していないようです。非推奨のcapitalization属性も試しました。そして、プログラムで物事を設定します。

他の誰かがこの問題に遭遇しましたか?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"/>
4

4 に答える 4

5

デバイスのキーボード設定を確認できますか。一部のデバイス (Samsung Note 2) では、自動大文字化チェック /UN-check オプションが提供されます。

于 2013-05-21T13:41:44.190 に答える
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) {

    }
};

// TextViewer に TextWatcher を追加する

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;
    }
}
}

これが役立つことを願っています。

于 2016-11-24T06:35:42.467 に答える
1

これを試すことができます...私のために働いた...

android:inputType="textCapWords"

または

android:inputType="textCapSentences"

または

android:inputType="textCapWords"

Samsung S5/S7の場合、Caps で最初のチャーターを作成するための「Auto Capitalize」という名前の設定に追加の設定があります。

設定がオフの場合は、最初の文字を大文字で入力するように選択する必要があります

于 2017-09-20T10:49:24.983 に答える
0

これは私に固有の問題であるか、誰も解決策を持っていないようです。TextWatcher ソリューションを使用しました。他の誰かが解決策を思いついた場合、これを変更します。

于 2013-03-13T17:34:56.460 に答える