0

検証が赤みがかった色に失敗したときにエディットテキストの背景色を変更し、ユーザーがそれを修正し始めたら、元の色に戻したい。

EditTextは丸みを帯びた境界線を持っているため、setBackgroundColor()を使用しても、きれいな丸みを帯びた長方形ではなく醜い長方形が描画されるため、ここでは機能しません。

背景を保存して、後で復元しようとしました。そして、新しいbakgroundを使用してそれを赤く塗ります。tv.getBackground()はoriginalBgerrorBgの両方に対して同じ参照を返すため、以下のコードは機能しません。カラーフィルターをerrorBgに設定すると、実際にはoriginalBgにも変更します。

背景オブジェクトをerrorBgに複製して、そこで色を変更するにはどうすればよいですか?

    final Drawable originalBg = tv.getBackground();
    final Drawable errorBg = tv.getBackground();   <-- this does not create a new Drawable, just the same reference
    errorBg.setColorFilter(0xFFff6347, Mode.MULTIPLY);
    tv.setBackgroundDrawable(errorBg);
    tv.invalidate();
    tv.addTextChangedListener(new TextWatcher() {

        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            tv.setBackgroundDrawable(originalBg);
            tv.invalidate();
        }

        public void afterTextChanged(Editable s) {}

        public void onTextChanged(CharSequence s, int start, int before, int count) {}

    });
4

3 に答える 3

1

コピーを作成してみましたか:

 final Drawable originalBg = tv.getBackground();
 final BitmapDrawable errorBg = new BitmapDrawable(getResources(), (BitmapDrawable) tv.getBackground();
于 2012-05-11T17:43:44.143 に答える
1

setColorFilter(null)でカラーフィルターを削除できます

tv.getBackgroundDrawable().setColorFilter(0xFFff6347, Mode.MULTIPLY);
tv.invalidate();
tv.addTextChangedListener(new TextWatcher() {

   public void beforeTextChanged(CharSequence s, int start, int count, int after) {
               tv.getBackgroundDrawable().setColorFilter(null);
               tv.invalidate();
   }
于 2012-05-11T17:47:52.683 に答える
0

背景として使用する角が丸いドローアブルを定義するxmlファイルを作成できます。

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="#ff6347"/>
    <corners android:radius="3dp"/>
</shape>

このファイルをdrawablesフォルダーに置きsetBackgroundDrawable()、EditTextのメソッドを使用して使用します。希望どおりの色とコーナー半径を試してみる必要があるかもしれません。あなたの質問に対する正確な答えではありませんが、うまくいけばそれが役立つでしょう。

于 2012-05-11T17:44:52.630 に答える