ありがとうございました。私はで入力された異なる文字に異なる色を持っている私のAndroidアプリケーションでのEditTextを持つようにしようとしていますAndroid:EditTextのさまざまな文字の色が異なります
。例えばのために
アルファベット「A」は常に青色でなければならず、アルファベット「b」は常に緑色でなければなりません。
これまでのところ、私は解決策を見つけることができませんでした。 私は正しい方向に私を導くのに十分親切にしてください。
ありがとうございました。私はで入力された異なる文字に異なる色を持っている私のAndroidアプリケーションでのEditTextを持つようにしようとしていますAndroid:EditTextのさまざまな文字の色が異なります
。例えばのために
アルファベット「A」は常に青色でなければならず、アルファベット「b」は常に緑色でなければなりません。
これまでのところ、私は解決策を見つけることができませんでした。 私は正しい方向に私を導くのに十分親切にしてください。
指摘したように、入力したテキストにSpannablesを適用することができます。このような何か:
colorEdit.addTextChangedListener(new TextWatcher() {
String lastText = null;
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
Log.d("", "lastText='" + lastText + "'");
Log.d("", "s='" + s + "'");
if (!s.toString().equals(lastText)) {
lastText = s.toString();
String res = "";
char[] split = s.toString().toCharArray();
for (char c : split) {
String color = null;
if (c == 'a') {
color = "red";
} else if (c == 'b') {
color = "green";
} else if (c == 'c') {
color = "blue";
}
// etc...
if (color != null) {
res += "<font color=\"" + color + "\">" + c
+ "</font>";
} else {
res += c;
}
}
int selectStart = colorEdit.getSelectionStart();
int selectEnd = colorEdit.getSelectionEnd();
colorEdit.setText(Html.fromHtml(res));
colorEdit.setSelection(selectStart, selectEnd);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void afterTextChanged(Editable s) {}
});
注意すべきいくつかの事は、私はもちろん再び実行するonTextChanged
を起こしsetText
呼び出すので、私はテキストが実際に変更されたことを確認してください。また、カーソルの位置が正しく保存されていないため、保存して復元することもできます。
ベストショットはおそらくEditText
を上書きし、自分でdraw()
を書きます。しかし、この方法は、通常は組み込みのビュー・クラスをオーバーライドするので、狂気になります。
おそらく、それぞれの文字をそれ自身のForegroundColorSpanでラップしたいと思うでしょう。 TextWatcherを追加し、テキストが編集されるときにSpannablesを適用します。
私があなただったら、InputFilter
を使ってください。 setText()
のtextWatcher{} onTextChange()
にはいくつかの問題があります(たとえば、ソフトキーボードでは国別の手紙を選択できません)。
私はあなたの言うことは、私の唯一の選択肢かもしれないと思うし始めていました。しかし、私はEditTextウィジェットのダミーイメージにonClickリスナーを追加し、入力テキストを使用して文字を自己設計の文字イメージに置き換えることも考えていました。これを一貫して考えたことはありませんが、私はそれが最後の手段/あなたの解決策(正しい方法ですが、はい、狂気)として仕事をするかもしれないと思います。 – Heartache