ImageViews、TextViews、背景画像など、さまざまなアイテムを含むビューを均一にグレーアウトするにはどうすればよいですか。それぞれを個別にグレーアウトする必要がありますか?または、すべてに同じカラーフィルターを適用する方法はありますか?
6 に答える
他の誰かがより良い答えを持っていない限り、私の現在の方法は、各項目を個別にグレーアウトしています.
PorterDuffColorFilter greyFilter = new PorterDuffColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
myLayout.getBackground().setColorFilter(greyFilter);
myImageView.setColorFilter(greyFilter);
myTextView.setTextColor(0xff777777);
より多くのまたはネストされた子の場合、おそらく instanceof を使用したループが適していますが、私はそれを必要としません。
編集: このフィルターは実際には灰色ではありません。より良いフィルターは次のとおりです: Drawable => grayscale 同じ方法で使用できます。
アイテムを「グレーアウト」するために使用している方法に完全に依存します。setEnabled(false)
親を呼び出すことによってそうしている場合ViewGroup
、デフォルトでは状態フラグ (無効化など) は子ビューに細分化されません。ただし、これをカスタマイズする簡単な方法が 2 つあります。
1 つのオプションは、XML の各子ビューに属性を追加することです。 android:duplicateParentState="true"
これにより、子は親から状態フラグを取得するように指示されます。ただし、これは、有効になっているだけでなく、押された、チェックされたなどを含むすべてのフラグをミラーリングします。
別のオプションは、あなたのカスタムサブクラスを作成しViewGroup
、オーバーライドsetEnabled()
してすべての子ビューも呼び出すことです。
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
for(int i=0; i < getChildCount(); i++) {
getChildAt(i).setEnabled(enabled);
}
}