CardViewの周りの影の色を変更することはできますか?主に、選択されたカードをマークするために使用されます点灯時?
Lおよびpre-Lデバイスで有効である必要があります。
CardView
シャドウカラーは、CardViewライブラリのリソースで定義されています。独自のプロジェクトでリソース値を再定義することでオーバーライドできますが、コードで動的に変更することはできません。
編集:リソース値のオーバーライドは、Lollipop以前のデバイスにのみ影響します。 Lollipop以降では、CardView
は常に色を変更できないネイティブシャドウの実装を使用します。
Update: my modification を確認してください。
回避策は次のとおりです。
コピー ソースコード of CardView
。次に、独自のAndroid Library Moduleを作成し、サポートライブラリの代わりにこのモジュールを使用します。これらの後に、以下のようにCardViewのコードをコメントまたは削除します:
static {
// if (Build.VERSION.SDK_INT >= 21) {
// IMPL = new CardViewApi21Impl();
// } else
if (Build.VERSION.SDK_INT >= 17) {
IMPL = new CardViewApi17Impl();
} else {
IMPL = new CardViewBaseImpl();
}
IMPL.initStatic();
}
つまり、apiが21以上の場合でも、compat-version CardViewApi17Impl
を使用します。その後、独自のcardview_shadow_start_color
とcardview_shadow_end_color
を定義して、クラスRoundRectDrawableWithShadow
のそれらをオーバーライドできます。さらに、それをよりカスタマイズ可能にすることができます。
希望は誰かを助けることができます。
私は小さなトリックを使用しました。 1つのCardViewは別のCardViewの後ろに配置されます。両方とも同じで、違いはcard_view:cardElevation="10dp"
バックグラウンド1、およびcard_view:cardElevation="2dp"
直面しているもの。標高の減算により、シャドウの長さが決まり、2番目のCardViewの色が最初のシャドウの色になります。
例:
<Android.support.v7.widget.CardView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/view_click_basement"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="2dp"
card_view:cardCornerRadius="5dp"
card_view:cardBackgroundColor="@color/colorNewGreen"
card_view:cardElevation="10dp"
card_view:cardUseCompatPadding="true">
<Android.support.v7.widget.CardView
Android:id="@+id/view_click"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="2dp"
card_view:cardCornerRadius="5dp"
card_view:cardElevation="2dp"
card_view:cardUseCompatPadding="true">