web-dev-qa-db-ja.com

Cardview-カードの周りの白い境界線

私が書いているカスタムビューのルートとしてcardviewを使用しています。 v7サポートライブラリを使用しています。私のXMLは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_marginRight="6dp"
        card_view:cardElevation="0dp">

    <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:orientation="vertical">

        <!-- some other views -->
    </LinearLayout>
</Android.support.v7.widget.CardView>

私の問題は、カードビューの周りに白い境界線が表示されることです。右側が厚いため、標高を示すためにそこにあるように見えます。私はXMLのcardElevationMaxCardElevationを次のように調整しようとしました:card_view:cardElevation="0dp"

そして、CardViewを拡張し、このレイアウトを使用するカスタムビューのコードで:

setCardElevation(0);
setMaxCardElevation(0);

しかし、白い境界線は残ります。私はそれを取り除く方法がわかりません。なぜこれが起こっているのか、白い境界線をどのように削除できるかについての提案があれば、それを歓迎します。どうもありがとう。

31
TheMethod

私はそれが少し遅れていることを知っていますが、同様の問題を抱えている人にとっては:

同じ問題がありました。Lollipop以前のデバイスに白い境界線が表示されていました。

XMLで cardPreventCornerOverlapfalseに設定して解決しました。

このような:

<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:layout_width="wrap_content"
    Android:layout_height="match_parent"
    Android:layout_marginRight="6dp"
    card_view:cardPreventCornerOverlap="false">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical">

        <!-- some other views -->
    </LinearLayout>
</Android.support.v7.widget.CardView>

お役に立てれば!

84
pol_databender

私はゲームに遅れているかもしれませんが、私は同じ問題を抱えていました。単純なソリューションを共有したかっただけです!

私のカスタムビューはCardViewを拡張し、元の質問と同様にXMLのルート要素(つまりCardView)にマージンを適用しました。これにより、次のような余分な白い境界線が表示されました。

Before

解決策は、カスタムビューXMLのルートからカスタムビューの宣言にマージンを移動することでした(スニペットのコメントを確認)

コードスニペット:

<Android.support.v7.widget.CardView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/cvSettings"
    style="@style/DefaultCardViewStyle"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_margin="@dimen/default_margin" <!-- Remove this -->
    app:cardElevation="@dimen/default_card_elevation">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical">
        .
        .
        .
</Android.support.v7.widget.CardView>

余白を越えて余分な白い境界線を取り除いたカスタムビュー宣言に移動しました。

<com.example.Android.custom.MyCustomView
        Android:id="@+id/custom_view"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_margin="@dimen/default_margin" <!-- Move it here-->
        cv:pt_widgetColor="@color/colorAccent" />

変更後、はるかにきれいに:):

enter image description here

3
prerak

サポートCardViewはコンテンツクリッピングをサポートしていません。古いデバイスでは高価なためです。 Canvas.saveLayer/restoreLayerおよびPorterDuffモードを使用してコンテンツをクリップできます。これは、 Carbon が正しいコンテンツクリッピングで丸い角を実装する方法です。画像をご覧ください:

enter image description here

3
Zielony