2014-11-18 10 views
29

है, मैं रीसाइक्लिंग व्यू के अंदर तत्व के रूप में कार्डव्यू का उपयोग कर रहा हूं। ऐसा करने पर एंड्रॉइड स्वचालित रूप से कार्ड व्यू और स्क्रीन और विभिन्न कार्ड व्यू के बीच मार्जिन उत्पन्न करता है।रीसाइक्लिंग व्यू के अंदर कार्डव्यू अतिरिक्त मार्जिन

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

यह पूरी तरह से काम कर रहा था: using-recyclerview-and-cardview-in-eclipse-adt

मैं इस सूची में पहले तत्व के लिए एक LinearLayout उपयोग कर रहा था:

<android.support.v7.widget.CardView 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@color/galleryCardBGColor" 
app:cardCornerRadius="2dp" > 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/my_recycler_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="vertical" /> 

मैं उन्हें अपने परियोजना में एकीकृत करने के लिंक के निर्देशों का पालन किया ठीक है, सूची तत्वों के बीच जो भी मार्जिन नहीं है। मैंने अभी कार्डव्यू के अंदर रैखिक लेआउट रखा है जिसके परिणामस्वरूप अतिरिक्त मार्जिन हैं।

कारण यह है कि मैं इन तत्वों के लिए सटीक मार्जिन प्रदान करना चाहता हूं, और अब मैं जो भी मार्जिन आपूर्ति करता हूं उसे इस पूर्ववर्ती मार्जिन में जोड़ा जा रहा है। मैंने कार्ड दृश्य तत्व में शून्य/नकारात्मक पैडिंग/मार्जिन की आपूर्ति करने का प्रयास किया है लेकिन इनमें से कोई भी काम नहीं है।

कोई विचार, मैं इन मार्जिन को हटा सकता हूं या अन्यथा यह जान सकता हूं कि कितना मार्जिन जोड़ा जा रहा है।

उत्तर

40

क्या आपने यह जांच की है कि यह मार्जिन या पैडिंग है या नहीं? (देव विकल्प/शो लेआउट सीमाएं)

CardView छाया खींचने के लिए प्लेटफार्म प्री-एल में पैडिंग जोड़ता है। एल में, जब तक आप useCompatPadding=true सेट नहीं करते हैं, तो कोई अंतर नहीं होना चाहिए।

नकारात्मक मार्जिन जोड़ना (हालांकि यह बदसूरत है) काम करना चाहिए। यदि ऐसा नहीं है, तो कृपया कुछ और कोड जोड़ें कि आप उन्हें कैसे जोड़ रहे हैं और आप RecyclerView कैसे सेट अप कर रहे हैं।

+4

card_view_compat यह एक गद्दी है और हाँ मैं एक पूर्व एल डिवाइस पर परीक्षण कर रहा हूँ। मुझे सही दिशा में इंगित करने के लिए धन्यवाद: मुझे कार्डव्यू दस्तावेज़ में निम्नलिखित पाया गया: एल से पहले, कार्डव्यू अपनी सामग्री में पैडिंग जोड़ता है और उस क्षेत्र में छाया खींचता है। यह पैडिंग राशि अधिकतम कार्ड के बराबर है (1 - cos45) * किनारों पर कोने त्रिज्या और अधिकतम कार्ड ऊंचाई * 1.5 + (1 - cos45) * कोनेराइडस ऊपर और नीचे। मैं इस से पैडिंग मानों को समझ सकता हूं (और जो मैं प्रदान करना चाहता हूं उससे घटाना)। मेरे पास अब एक एल डिवाइस नहीं है, जब मैं उस पर परीक्षण करता हूं तो अपडेट हो जाएगा। ps: -ve मार्जिन काम नहीं करते हैं। – vj9

+3

अधिक सटीक: card_view: cardUseCompatPadding = "true" –

+0

यह मेरे लिए काम करता है: https://android.jlelse.eu/using-full-width-cards-to-maximize-content-f739cb863ce8 –

42

यह मेरे लिए काम किया। उपयोग:

card_view:cardElevation="0dp" 
card_view:cardMaxElevation="0dp" 
+3

यह सेटिंग के अलावा 'कार्डकॉर्नर रेडियस =" 1 डीपी "' या कुछ अन्य मनमानी राशि मेरे लिए काम करती है! धन्यवाद, @ शुभम मुझे लगता है कि कार्ड सेट करना मैक्स एलिवेशन ने चाल – w3bshark

+8

किया है, ठीक है, मैं कार्ड ऊंचाई को हटाना नहीं चाहता हूं इसलिए आपका समाधान – Toochka

+0

सरल समाधान नहीं है। –

4

अपने card यह काम करता है के लिए card_view:cardPreventCornerOverlap="false" केवल तभी जब आपके छवि गोल कोनों

17

बस @yigit के जवाब में वर्णित है, CardView यह आकर्षित करने के लिए एक डिफ़ॉल्ट गद्दी जोड़ देगा है एंड्रॉयड से पहले छाया है एल। पैडिंग आकार कार्डव्यू के दस्तावेज़ में वर्णित है।

मुझे इस पैडिंग को साफ़ करने का तरीका मिला (सामग्री के लिए पैडिंग जोड़ने के लिए) कार्डव्यू की सामग्री पैडिंग लेफ्ट (/ दाएं/शीर्ष/नीचे) विशेषताओं का उपयोग करना है।

यदि आप डिफ़ॉल्ट पैडिंग को साफ़ करना चाहते हैं, तो आप सामग्री को कम से कम मूल्य पर सेट कर सकते हैं। यदि आप सामग्री पैडिंग जोड़ना चाहते हैं, तो सामग्री को उस मूल्य पर सेट करें जिसे आप चाहते हैं।

मेरे मामले में, मैं डिफ़ॉल्ट गद्दी खाली करने के लिए इन कोड का उपयोग करें:

card_view:contentPaddingLeft="-3dp" 
card_view:contentPaddingRight="-3dp" 
card_view:contentPaddingTop="-3dp" 
card_view:contentPaddingBottom="-3dp" 

मैंने कोशिश की @Shubham के जवाब है, लेकिन एक IllegalStateException संदेश के साथ RadialGradient.java में फेंक दिया जाता है "त्रिज्या होना चाहिए> 0 "।

+0

यह सही नहीं है, लेकिन कामकाजी काम कर रहा है;) धन्यवाद! – Tomas

13

उपयोग इस दो नीचे दिए गए टैग: स्वीकार कर लिया प्रश्न के अंतर्गत @ vj9 से

card_view:cardPreventCornerOverlap="false" 
card_view:cardUseCompatPadding="true" 
1

टिप्पणी मुझे ऑफसेट गणना करने के लिए मदद की।इसे यहाँ साझा करना है क्योंकि यह किसी और मदद कर सकता है:

public static int getVerticalCardViewOffset(Context context) { 
    Resources res = context.getResources(); 
    int elevation = res.getDimensionPixelSize(R.dimen.cardview_default_elevation); 
    int radius = res.getDimensionPixelSize(R.dimen.cardview_default_radius); 
    return (int) (elevation * 1.5 + (1 - Math.cos(45)) * radius); 
} 

public static int getHorizontalCardViewOffset(Context context) { 
    Resources res = context.getResources(); 
    int elevation = res.getDimensionPixelSize(R.dimen.cardview_default_elevation); 
    int radius = res.getDimensionPixelSize(R.dimen.cardview_default_radius); 
    return (int) (elevation + (1 - Math.cos(45)) * radius); 
} 
+0

क्या यह मानने के बजाय कार्ड से असली ऊंचाई प्राप्त करना बेहतर नहीं होगा कि यह डिफ़ॉल्ट ऊंचाई का उपयोग करता है? 'फ्लोट एलिवेशन = cardView.getCardElevation(); ' – Alf

+0

त्रिज्या के लिए समान:' फ्लोट त्रिज्या = cardView.getRadius(); ' – Alf

+0

यदि आप डिफ़ॉल्ट कार्डव्यू शैली का उपयोग नहीं करते हैं, तो निश्चित रूप से। या इसे अपने स्वयं के dimens में बदलें। –

2

ठीक है, लगता है कि यह करने के लिए एक बहुत ही आसान तरीका है, गद्दी और सभी अनुमान लगा के बिना:

card_view:cardPreventCornerOverlap="false" 

या का उपयोग कर जावा:

cardView.setPreventCornerOverlap(false) 
-2

myCardView.setShadowPadding (0,0,0,0);

+0

यह विधि छिपी हुई है! –

0

उपयोग

android:adjustViewBounds="true" 

दृश्य आपको cardview

0

मैं अपने देर से जानते हैं, लेकिन मैं इसे किसी

app:cardPreventCornerOverlap="false" 

की स्थापना एप्लिकेशन में मदद मिलेगी आशा में लिपटे चाहते पर झूठे इच्छा के cardPreventCornerOverlap चाल करें :)

0

यदि आपको कोने त्रिज्या या ऊंचाई डाउनलेवल, सह की आवश्यकता नहीं है प्री-लॉलीपॉप पर FrameLayout का उपयोग करके nsider।

<include layout="@layout/card_view_compat" />

लेआउट/

<merge 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    > 
    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     > 
     <include layout="@layout/content" /> 
    </FrameLayout> 
</merge> 

लेआउट-V21/card_view_compat

<merge 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    > 
    <android.support.v7.widget.CardView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:cardCornerRadius="3dp" 
     app:cardElevation="4dp" 
     > 
     <include layout="@layout/content" /> 
    </android.support.v7.widget.CardView> 
</merge> 
संबंधित मुद्दे