23

मैं टुकड़े पर छाया प्रभाव दिखाने के लिए, गतिविधि के निचले हिस्से में एक फ़्रेमेलआउट का उपयोग करता हूं, मैं एंड्रॉइड जोड़ता हूं: ऊंचाई। लेकिन छाया प्रभाव केवल नीचे की ओर दिखाई देते हैं न कि शीर्ष तरफ, कोई मुझे कुछ सलाह दे सकता है?एंड्रॉइड: ऊंचाई केवल नीचे की ओर छाया प्रभाव पड़ती है, छाया प्रभाव को शीर्ष तरफ कैसे दिखाया जाए?

<FrameLayout 
    android:id="@+id/bottom_container" 
    android:background="#00737f" 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:layout_gravity="bottom" 
    android:elevation="4dp" 
    android:layout_alignParentBottom="true" 
    android:layout_marginBottom="50dp"/> 

उत्तर

17

एक चाल है जिसका उपयोग व्यू के ऊपर एक छाया प्रदर्शित करने के लिए किया जा सकता है।

असल में हमें दो नेस्टेड लेआउट का उपयोग करना है, जहां बाहरी लेआउट elevation के साथ छाया को रोकता है और आंतरिक लेआउट background सेट करता है। फिर बाहरी लेआउट के लिए एक padding की स्थापना करके, हम आंतरिक लेआउट नीचे शिफ्ट कर सकते हैं छाया ले जाए बिना, है, इस प्रकार छाया की अधिक दिखाई देने लगता है:

विशेषता outlineProvider, वह यह है कि
<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:layout_alignParentBottom="true" 
    android:layout_marginBottom="50dp" 
    android:elevation="4dp" 
    android:outlineProvider="bounds" 
    android:paddingTop="2dp" 
    android:layout_marginTop="-2dp"> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#00737f"> 

     <!-- content --> 

    </FrameLayout> 

</FrameLayout> 

यहाँ एक महत्वपूर्ण बात यह है बाहरी लेआउट को पृष्ठभूमि सेट किए बिना भी छाया डालने की आवश्यकता होती है।

आगे हम पैडिंग द्वारा बनाए गए ऑफसेट की क्षतिपूर्ति के लिए नकारात्मक margin निर्दिष्ट करते हैं। उपयोग-मामले के आधार पर हम इसे छोड़ सकते हैं।

लेकिन ध्यान: हम बहुत ज्यादा दृश्य बदलाव हैं, तो कुछ प्रतिपादन कलाकृतियों दिखाई देने लगते हैं:

android elevation shadow offset examples

Source of this example on Github

संबंधित मुद्दे