私が書いているカスタムビューのルートとして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のcardElevation
とMaxCardElevation
を次のように調整しようとしました:card_view:cardElevation="0dp"
そして、CardViewを拡張し、このレイアウトを使用するカスタムビューのコードで:
setCardElevation(0);
setMaxCardElevation(0);
しかし、白い境界線は残ります。私はそれを取り除く方法がわかりません。なぜこれが起こっているのか、白い境界線をどのように削除できるかについての提案があれば、それを歓迎します。どうもありがとう。
私はそれが少し遅れていることを知っていますが、同様の問題を抱えている人にとっては:
同じ問題がありました。Lollipop以前のデバイスに白い境界線が表示されていました。
XMLで cardPreventCornerOverlap をfalse
に設定して解決しました。
このような:
<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>
お役に立てれば!
私はゲームに遅れているかもしれませんが、私は同じ問題を抱えていました。単純なソリューションを共有したかっただけです!
私のカスタムビューはCardView
を拡張し、元の質問と同様にXMLのルート要素(つまりCardView
)にマージンを適用しました。これにより、次のような余分な白い境界線が表示されました。
解決策は、カスタムビュー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" />
変更後、はるかにきれいに:):
サポートCardViewはコンテンツクリッピングをサポートしていません。古いデバイスでは高価なためです。 Canvas.saveLayer/restoreLayerおよびPorterDuffモードを使用してコンテンツをクリップできます。これは、 Carbon が正しいコンテンツクリッピングで丸い角を実装する方法です。画像をご覧ください: