एंड्रॉइड एल में छाया नहीं दिखा रहा है


123

Listview के अंदर मेरा कार्डव्यू Android L (Nexus 5) में छाया नहीं दिखा रहा है। इसके अलावा गोल किनारों को ठीक से नहीं दिखाया गया है। यहाँ लिस्टव्यू एडॉप्टर व्यू के लिए कोड है:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res/com.example.myapp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardBackgroundColor="@android:color/white"
    android:foreground="?android:attr/selectableItemBackground"
    app:cardCornerRadius="4dp"
    app:cardElevation="4dp" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingTop="@dimen/activity_vertical_margin" >

        <TextView
            android:id="@+id/tvName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginTop="@dimen/padding_small"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <ImageView
            android:id="@+id/ivPicture"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tvName"
            android:layout_centerHorizontal="true"
            android:scaleType="fitCenter" />

        <TextView
            android:id="@+id/tvDetail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/ivPicture"
            android:layout_centerHorizontal="true"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin" />
    </RelativeLayout>
</android.support.v7.widget.CardView>

और सूची दृश्य xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res/com.example.myapp"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/app_bg" >

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:cacheColorHint="#00000000"
    android:divider="@android:color/transparent"
    android:drawSelectorOnTop="true"
    android:smoothScrollbar="true" />

<ProgressBar
    android:id="@+id/progressBarMain"
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:visibility="gone" /></RelativeLayout>

यह उचित छाया और गोल कोनों के साथ पूर्व एल उपकरणों पर ठीक काम करता है। लेकिन एंड्रॉइड एल डिवाइस पर काम नहीं कर रहा है। क्या आप बता सकते हैं कि मैं यहाँ क्या याद कर रहा हूँ?



@ नहीं, लेकिन मैं कार्डव्यू या इसके किसी भी अभिभावक के विचार के लिए किसी भी पारदर्शी पृष्ठभूमि का उपयोग नहीं कर रहा हूं
isumit

@isumit हां, यहां भी यही समस्या है।
ग्रेवॉल्फ 82

@ greywolf82 मामले में आप अभी तक एक समाधान नहीं मिला है। मैंने कार्डव्यू और इसके अब लॉलीपॉप में छाया प्रदर्शित करने के लिए मार्जिन जोड़ा
isumit

जवाबों:


279

डॉक्स के माध्यम से फिर से जाने के बाद, मैंने आखिरकार इसका हल ढूंढ लिया।

बस card_view:cardUseCompatPadding="true"अपने जोड़ने CardViewऔर छाया लॉलीपॉप उपकरणों पर दिखाई देगा।

क्या होता है, एक में सामग्री क्षेत्र CardView पूर्व-लॉलीपॉप और लॉलीपॉप उपकरणों पर अलग आकार । तो लॉलीपॉप उपकरणों में छाया वास्तव में कार्ड द्वारा कवर किया जाता है, इसलिए यह दिखाई नहीं देता है। इस विशेषता को जोड़ने से सामग्री क्षेत्र सभी उपकरणों पर समान रहता है और छाया दिखाई देती है।

मेरा xml कोड इस प्रकार है:

<android.support.v7.widget.CardView
    android:id="@+id/media_card_view"
    android:layout_width="match_parent"
    android:layout_height="130dp"
    card_view:cardBackgroundColor="@android:color/white"
    card_view:cardElevation="2dp"
    card_view:cardUseCompatPadding="true"
    >
...
</android.support.v7.widget.CardView>

@ एलेक्स-लॉकवुड क्या आप कृपया अपना परिवर्तन अर्थात, card_view:cardElevation="2sp"को समझा सकते हैं card_view:cardElevation="2dp"?
राम पात्रा

1
@ रामस्वरुप का spउपयोग केवल पाठ आकारों के लिए किया जाना चाहिए। dpअन्य सभी आयामों के लिए उपयोग किया जाना चाहिए।
एलेक्स लॉकवुड

मुझे मेरा मामला card_view: cardUseCompatPadding की आवश्यकता थी। इसके अतिरिक्त मुझे टारगेट बदलने की जरूरत है। एसडीस्कॉर्ट को 21 में बदलना। मार्जिन में बदलाव का कोई प्रभाव नहीं है।
रेमी

@ KishanSolanki124 मुझे लगता है कि ओपी (@isumit) ने इस धागे का ट्रैक खो दिया है।
राम पात्रा

55

यह मत भूलो कि छाया खींचने के लिए आपको hardwareAcceleratedड्राइंग का उपयोग करना चाहिए

hardwareAccelerated = true

यहां छवि विवरण दर्ज करें

hardwareAccelerated = false

हार्डवेयरएक्टिवेटेड कार्ड व्यू

देखें एंड्रॉयड हार्डवेयर त्वरण जानकारी के लिए


10
यदि आपका लक्ष्य एपीआई स्तर> = 14 है, तो हार्डवेयर त्वरण डिफ़ॉल्ट रूप से सक्षम है!
अक्सेल फातिहा

2
यह काम कर रहा है,। लेकिन मुझे इसके पीछे का कारण समझ में नहीं आता है
दीपक कुमार 12

54

app:cardUseCompatPadding="true"अपने कार्डव्यू के अंदर का उपयोग करें। उदाहरण के लिए

<android.support.v7.widget.CardView
        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginRight="@dimen/cardviewMarginRight"
        app:cardBackgroundColor="@color/menudetailsbgcolor"
        app:cardCornerRadius="@dimen/cardCornerRadius"
        app:cardUseCompatPadding="true"
        app:elevation="0dp">
    </android.support.v7.widget.CardView>

28

जाँच करें हार्डवेयर प्रकट में यह सच है, यह झूठी छाया हटाता है, जब झूठी छाया xml पूर्वावलोकन में प्रकट होती है, लेकिन फोन में नहीं।


24

इस लाइन को CardView में जोड़ें…।

card_view:cardUseCompatPadding="true" //for enable shadow
card_view:cardElevation="9dp" // this for how much shadow you want to show

टिप्स

आप layout_marginTop और layout_marginBottom से बच सकते हैं क्योंकि छाया स्वयं ऊपर और उसके नीचे कुछ जगह लेती है। आप कितनी राशि का उपयोग करके परिभाषित करते हैं कि आप card_view में उपयोग करेंगे: cardElevation = "ndp"।

खुश कोडिंग:


22

अंत में मैं कार्डव्यू में मार्जिन जोड़कर लॉलीपॉप डिवाइस पर छाया प्राप्त करने में सक्षम था। यहाँ अंतिम कार्डव्यू लेआउट है:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res/com.example.myapp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardBackgroundColor="@android:color/white"
    android:foreground="?android:attr/selectableItemBackground"
    android:layout_marginLeft="@dimen/activity_horizontal_margin"
    android:layout_marginRight="@dimen/activity_horizontal_margin"
    android:layout_marginTop="@dimen/padding_small"
    android:layout_marginBottom="@dimen/padding_small"
    app:cardCornerRadius="4dp"
    app:cardElevation="4dp" >

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <TextView
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="@dimen/padding_small"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <ImageView
        android:id="@+id/ivPicture"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tvName"
        android:layout_centerHorizontal="true"
        android:scaleType="fitCenter" />

    <TextView
        android:id="@+id/tvDetail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/ivPicture"
        android:layout_centerHorizontal="true"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin" />
</RelativeLayout>


2
मेरे पास पहले से ही card_view था: cardUseCompatPadding मान सेट, फिर भी shaddows प्राप्त करने में सक्षम नहीं था। मुझे जो याद आ रहा था, वह हाशिये का है। और यह वास्तव में काम किया। धन्यवाद।
अजीत मेमना

आपका मार्जिन मान क्या है? है 8dpपर्याप्त?
बेथेल

13

बस इस टैग को जोड़ें:

app:cardElevation="2dp"
app:cardUseCompatPadding="true"

तो इसका बन:

<android.support.v7.widget.CardView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:cardBackgroundColor="?colorPrimary"
    app:cardCornerRadius="3dp"
    app:cardElevation="2dp"
    app:cardUseCompatPadding="true"
    app:contentPadding="1dp" />

12

आप कार्ड दृश्य में छाया के लिए कोड की इस पंक्ति को जोड़ सकते हैं

card_view:cardElevation="3dp"

नीचे आपके पास एक उदाहरण है

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardBackgroundColor="@android:color/white"
    android:foreground="?android:attr/selectableItemBackground"
    card_view:cardElevation="3dp"
    card_view:cardCornerRadius="4dp">

उम्मीद है की यह मदद करेगा!


धन्यवाद, कुंजी card_view था: कार्ड एलिवेशन और एंड्रॉइड नहीं: कार्ड एलिवेशन
Badr

8

आप इस लाइन को जोड़कर देख सकते हैं

 card_view:cardUseCompatPadding="true"

संपूर्ण कोड इस तरह प्रतीत होगा

  <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="match_parent"
        android:layout_height="200dp"
        android:layout_margin="5dp"
        android:orientation="horizontal"
        card_view:cardUseCompatPadding="true"
        card_view:cardCornerRadius="5dp">
 </android.support.v7.widget.CardView

7

मेरे मामले में एंड्रॉइड एल उपकरणों पर छाया दिखाई नहीं दे रही थी क्योंकि मैंने एक मार्जिन नहीं जोड़ा था। समस्या यह है कि CardView इस मार्जिन को स्वचालित रूप से <5 डिवाइस पर बनाता है तो अब मैं इसे इस तरह से करता हूं:

CardView card = new CardView(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
if (Build.VERSION_CODES.LOLLIPOP == Build.VERSION.SDK_INT) {
    params.setMargins(shadowSize, shadowSize, shadowSize,
            shadowSize);
} else {
    card.setMaxCardElevation(shadowSize);
}
card.setCardElevation(shadowSize);
card.setLayoutParams(params);

लेआउट फ़ाइल कार्यों से कार्डव्यू में मार्जिन जोड़ना। कोड से कोशिश नहीं की
isumit

6

एंड्रॉइड जोड़ें: हार्डवेयरएक्लेरेटेड = "सच" आपकी मैनिफ़ेस्ट फ़ाइल में जैसे नीचे मेरे लिए काम करता है

 <activity
        android:name=".activity.MyCardViewActivity"
        android:hardwareAccelerated="true"></activity>

4

सबसे पहले यह सुनिश्चित करें कि निम्नलिखित निर्भरता build.gradle फ़ाइल में उचित रूप से जोड़ी और संकलित है

    dependencies {
    ...
    compile 'com.android.support:cardview-v7:21.0.+'

    }

और इसके बाद निम्न कोड का प्रयास करें:

     <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="match_parent"
            android:layout_height="200dp"
            android:layout_margin="5dp"
            android:orientation="horizontal"
            card_view:cardCornerRadius="5dp">
     </android.support.v7.widget.CardView

एंड्रॉइड L बीक्यूज़ लेआउट में समस्या बढ़ जाती है लेआउट_अर्जीन विशेषता नहीं जोड़ी गई है


0

मेरी recyclerview को लोड करने में धीमी थी इसलिए stackoverflow.com को पढ़कर मैंने हार्डवेयर को "गलत" में बदल दिया, फिर डिवाइस में ऊंचाई नहीं दिख रही है। मैं सच में वापस बदल गया। इससे मेरा काम बनता है।


0

कार्ड दृश्य आपकी छाया के कारण नहीं दिखा सकता है क्योंकि RelativeLayoutकार्ड दृश्य की छाया पर है। छाया दिखाने के लिए अपने कार्ड दृश्य पर मार्जिन जोड़ें। उदाहरण के लिए:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="4dp"
    android:layout_marginBottom="8dp">

</android.support.v7.widget.CardView>

</RelativeLayout>

0

मुझे लगता है कि यदि आप पहले अपना प्रकटीकरण जांचते हैं, तो यदि आपने लिखा है कि आपको कार्ड के लिए छाया android:hardwareAccelerated="false" देना चाहिए तो यहांtrue इस उत्तर की तरह


0

जांचें कि आप android:layerType="software"अपने RecyclerView में उपयोग नहीं कर रहे हैं ।

android:layerType="hardware"मेरे लिए इस मुद्दे को हल करने के लिए इसे बदलना ।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.