子ビューがその親の押された状態または選択された状態をコピーするのを防ぐ方法を求める SO に関する多くの質問があります。ただし、ここでは逆の方法を求めています:) - アプリの1つで非常に奇妙な動作を見ました:
4.0.4 デバイス (API 15) でアプリを実行すると、私が見た動作は明らかなデフォルトと一致しました。つまり、親はその状態をすべての子ビューに転送します。
より高い API レベル (Android 4.4) で何も変更せずに同じアプリを実行すると、この動作が変わります: 親はその状態を転送しません。
関連するすべての子ビューの xml レイアウトを導入duplicateParentState
しましたが、ここでは役に立たないようです。
これは既知の「問題」ですか、それとも API 15 から API >> 15 への動作の計画的な変更ですか?
状態がすべての API レベルで適切に転送されるようにするにはどうすればよいですか?
ここで役立つ/関連性がある場合: 親の状態を複製したいサブビューは、ImageView
tintColors を追加するカスタムです - 動作は 4.0.4 で正しいため、このクラスに間違いはないはずです?
public class INCImageView extends ImageView {
private int _tintColor;
private int _highlightedTintColor;
private int _selectedTintColor;
public INCImageView(Context context, AttributeSet attrs) {
super(context, attrs);
this.setFocusable(true);
this.setClickable(true);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.INCImageView);
_tintColor = array.getInt(R.styleable.INCImageView_tintColor, getResources().getColor(R.color.inc_tint));
this.setColorFilter(_tintColor);
_selectedTintColor = array.getInt(R.styleable.INCImageView_selectedTintColor, _tintColor);
_highlightedTintColor = array.getInt(R.styleable.INCImageView_highlightedTintColor, _tintColor);
array.recycle();
}
@Override
public void setSelected(boolean selected) {
super.setSelected(selected);
this.setColorFilter((selected ? _selectedTintColor : _tintColor));
}
@Override
public void setPressed(boolean pressed) {
super.setPressed(pressed);
this.setColorFilter((pressed ? _highlightedTintColor : (this.isSelected() ? _selectedTintColor : _tintColor)));
}
}