4
4

2 に答える 2

2

単一のforループと回答を使用する方が良いと思います。

また、ソースからスパンをコピーするには、ソースをSpannableStringBuilderコンストラクターに渡すことが重要であることに注意してください。これを行わないと、物事が不安定になります。

    @Override
    public CharSequence filter(CharSequence source, int start,
            int end, Spanned dest, int dstart, int dend) {
        SpannableStringBuilder ret;

        if (source instanceof SpannableStringBuilder) {
            ret = (SpannableStringBuilder)source;
        } else {
            ret = new SpannableStringBuilder(source);
        }

        for (int i = end - 1; i >= start; i--) {
            char currentChar = source.charAt(i);
            char currentChar = source.charAt(i);
            int ascii = currentChar;
            if (ascii > 127) {    
                ret.delete(i, i+1);
                toast = mUtility.showToast("Invalid non-Ascii Character", Toast.LENGTH_SHORT);
            }     
        }

        return ret;
    }
于 2013-05-07T22:34:25.823 に答える
1

編集:

問題は、文字列全体を返すことですが、その文字の代わりの文字のみを返す必要があると思います。filter()テキストが変更されるたびに実行され、必ずしも。内の文字列全体を置き換えるとは限りませんEditText。あなたはそれに気をつける必要があるので、あなたはキャラクターが行くべき場所に文字列全体を押し込むことにならないようにします。

この質問は関連しており(英数字以外の代わりにASCII以外を使用するだけです)、そこでの答えは広く受け入れられているので、それを使用して必要なものを取得できるはずです。

紛らわしい答え/削除について申し訳ありません。私は家を出る直前に答えた。数分後、ロジックにギャップのある欠陥があることに気づいたので、モバイルに飛び乗って削除しました。私は自分の電話で完全な答えを入力しようとするのが嫌いなので、少し待たなければなりませんでした。

于 2012-10-19T18:43:14.220 に答える