2012-05-11 8 views
0

妥当性検査が赤みがかった色にならないときに私の編集テキストの背景色を変更したい、そして、ユーザーがそれを修正し始めるときに元の色を戻したい。Android EditText Drawableの背景を複製するには?

EditTextには丸みのある罫線があるため、を使用すると、setBackgroundColor()はここでは機能しません。丸い四角形の代わりに醜い矩形を描画するためです。

バックグラウンドを保存して後で復元しようとしました。そしてそれを赤く塗りつぶすために新しいbakgroundを使用してください。 tv.getBackground()は、オリジナルBgerrorBgの両方に同じ参照を返しますので、次のコードは機能しません。カラーフィルターをerrorBgに設定すると、実際にオリジナルBgに変更されます。

どのように私はので、私はそこに色を変更することができ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) {} 

    }); 

答えて

1

はあなたが私はあなたの提案をテストする必要はありませんでした、

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(); 
    } 
+0

それです。それは完璧に働いた! (tv.getBackgroundDrawable()が存在しないので、tv.getBackground()を使用しました);-) – ilomambo

1

あなたはコピーを作成しようとしたことがあり:

final Drawable originalBg = tv.getBackground(); 
final BitmapDrawable errorBg = new BitmapDrawable(getResources(), (BitmapDrawable) tv.getBackground(); 
+0

感謝をsetColorFilter(ヌル)とカラーフィルターを削除することができ、AB11のソリューションは完璧でした。 – ilomambo

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> 

あなたのドローアブルフォルダにこのファイルを入れて、それを使用するあなたのEditTextにsetBackgroundDrawable()メソッドを使用します。あなたはそれを望む方法を得るために、色とコーナーの半径で遊ぶ必要があるかもしれません。あなたの質問に対する答えは正確ではありませんが、うまくいけば助けになるかもしれません。

+0

私は新しい形を作成したくないですが、形はすでにあります。 – ilomambo

関連する問題