2

ロリポップ以前のデバイスでは、カードビューを押すと、醜い灰色の長方形が表示されるので、カードの影なしでカードコンテンツのみに色を設定するにはどうすればよいですか?

ここに私のcardView XMLがあります

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    card_view:contentPadding="50dp"
    card_view:cardElevation="5dp"
    android:clickable="true"
    android:foreground="?android:attr/selectableItemBackground">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
</android.support.v7.widget.CardView>

ありがとう!

4

1 に答える 1

0

私は自分の問題を解決する方法を見つけます。

CustomCardViewまず、 extendsという名前のカスタム クラスを作成しますCardView

次に、メソッドをオーバーライドし、カードのプレス ステータスが変更されたときにメソッドdrawableStateChanged()を呼び出してカードの背景色を変更します。setCardBackgroundColor()

最後に、レイアウト ファイルで CardView をこの CustomCardView に置き換えます。

このソリューションの唯一の欠点は、CardView が Android 5.0 以降でリップル プレス効果を表示できないことです。

これがあなたを助けることを願っています:)

これが私のコードです:

public class CustomCardView extends CardView {

public CustomCardView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
}

public CustomCardView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

public CustomCardView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    // TODO Auto-generated constructor stub
}

@Override
protected void drawableStateChanged() {
    if (isPressed()) {
        this.setCardBackgroundColor(getContext().getResources().getColor(R.color.card_view_pressed));
    } else {
        this.setCardBackgroundColor(getContext().getResources().getColor(R.color.card_view_normal));
    }
}
}
于 2015-06-10T13:08:08.850 に答える