2011-11-15 24 views
2

私は夜間に使用するためにUIを赤味にする必要があるAndroid天文アプリを持っています。多くのUI要素でうまくいく体系がありますが、CompoundButtons:CheckBoxとRadioButtonに問題があります。Android上でCheckBoxとRadioButtonを塗る

基本的な考え方は、UI要素のDrawableを取得し、それにカラーフィルタを設定するものがある場合です。私の問題は、複合ボタンの適切なDrawableを見つけることです。私はgetCompoundDrawables()は私が必要とするだろうと思うだろうが、4つのdrawableのための返された配列は、常に4要素のnullsを含んでいます。

ここでは、UI要素の色付けを試みるためにトップレベルビューで呼び出す再帰コードを示します。

public static void setNightVisionBkg(View view) 
{ 
    if (view instanceof ViewGroup) 
    { 
     Drawable drawable = view.getBackground(); 
     if (drawable != null) 
      drawable.setColorFilter(0xFFAA0000, PorterDuff.Mode.MULTIPLY); 

     ViewGroup group = (ViewGroup) view; 
     int numChildren = group.getChildCount(); 
     for (int i = 0; i < numChildren; i++) 
     { 
      View v = group.getChildAt(i); 
      Drawable d = v.getBackground(); 
      if (d != null) 
       d.setColorFilter(0xFFAA0000, PorterDuff.Mode.MULTIPLY); 

      if (v instanceof ViewGroup) 
      { 
       setNightVisionBkg((ViewGroup) v); 
      } 
      else if (v instanceof CompoundButton) 
      { 
       CompoundButton compBtn = (CompoundButton)v; 
       Drawable drawables[] = compBtn.getCompoundDrawables(); 
       for (int j = 0; j < drawables.length; j++) 
       if (drawables[j] != null) 
       { 
        drawables[j].setColorFilter(0xFFAA0000, PorterDuff.Mode.MULTIPLY); 
       } 
      } 
     } 
    } 
} 

これは、後で動作しないCompoundButtonのDrawables(すべてのDrawableがnull)を取得していることに注意してください。

これを行う方法についてのご意見はありますか?私は私自身のカスタムdrawableを設定できることを知っていますが、私は標準のものを使い、可能であればcolorFilterを設定したいと考えています。

答えて

2

私は若干異なる方法で私の問題を解決しました。 CheckBox(とRadioButton)のサブクラス化を終了しました。サブクラスでは、次のようにオーバーライドします。

protected boolean verifyDrawable(Drawable drawable) 

このメソッドでは、drawableにcolorFilterを設定します。よく働く。

0

ViewGroup以外のビューでは「通常の」表示は行われません。さらに、あなたのテスト のforループは、ビューがViewGroupの場合にのみ実行できます。

+0

いいえ、ViewGroup以外のビューは処理されません(あなたは進歩したと言いましたが、それはあなたが意図したものだと思います)。フィルタを設定するコードはCheckBoxに対して呼び出されますが、Drawableがすべてnullであるため影響はありません。私はデバッガでこれを確認しました。 ViewGroupの内部テストは子供向けですから、冗長テストではないと思います。 – btschumy

関連する問題