मैं सामग्री कार्ड और उसकी छाया के साथ एक मौसम ऐप बना रहा हूं। मैंने एक रैखिक लेआउट का उपयोग करके उन्हें केंद्रित करने का एक तरीका ढूंढ लिया है, लेकिन यह छाया को काट देता है। मेरे द्वारा इसे कैसे रोका जा सकता है? क्या रैखिक लेआउट या फ्रेम लेआउट का उपयोग किए बिना उन्हें संरेखित करने का कोई तरीका है?

यहाँ मेरा लेआउट कोड है: मैंने रूट के रूप में एक FrameLayout का उपयोग किया है, मेरे LinearLayout में दोनों सामग्री कार्ड हैं, मैं चाहता था कि वे एक समूह के रूप में केंद्रित हों, यदि आप ऐसा करने का कोई अन्य तरीका जानते हैं तो कृपया मुझे बताएं!

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
    android:id="@+id/img_background"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/background"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/app_name"
    android:fontFamily="cursive"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="25dp"
    android:textSize="50sp"
    android:textColor="#FFF"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Your location's weather in a touch!"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="90dp"
    android:textSize="17.3sp"
    android:textColor="@color/colorPrimaryText"/>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_gravity="center">
    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="270dp"
        android:layout_height="140dp"
        android:layout_gravity="center_horizontal"
        card_view:cardCornerRadius="4dp"
        card_view:cardElevation="5dp">

        <TextView
            android:id="@+id/tv_temperature"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:padding="16dp"
            android:text="30°C"
            android:textColor="@color/colorPrimaryText"
            android:textSize="50sp" />
    </android.support.v7.widget.CardView>

    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/cv_data"
        android:layout_width="270dp"
        android:layout_height="140dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        card_view:cardCornerRadius="4dp"
        card_view:cardElevation="5dp">

        <TextView
            android:id="@+id/tv_conditions"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:padding="16dp"
            android:text="Scatted Clouds"
            android:textColor="@color/colorPrimaryText"
            android:textSize="30sp" />
    </android.support.v7.widget.CardView>
</LinearLayout>

<ProgressBar
    android:id="@+id/pb_loading"
    android:layout_width="55dp"
    android:layout_height="55dp"
    android:layout_gravity="center"
    android:elevation="20dp"/>
<TextView
    android:id="@+id/tv_city_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:gravity="center"
    android:padding="20dp"
    android:fontFamily="sans-serif"
    android:textColor="#FFF"
    android:textSize="20sp"/>

screenshoot of my problem

3
Agustín Clemente 2 अगस्त 2018, 23:18
आपका <LinearLayout> अंदर क्या है? यदि हम संपूर्ण लेआउट देख सकते हैं तो इसका उत्तर देना आसान होगा।
 – 
Ben P.
2 अगस्त 2018, 23:27
संपूर्ण लेआउट फ़ाइल के साथ अपडेट किया गया।
 – 
Agustín Clemente
2 अगस्त 2018, 23:38
आपके द्वारा पोस्ट की गई छवि से यह स्पष्ट है कि नीले रंग की पृष्ठभूमि छाया को छुपाती है
 – 
user8959091
3 अगस्त 2018, 00:17

2 जवाब

सबसे बढ़िया उत्तर

ऐसा लगता है कि आपका लेआउट FrameLayout के बजाय ConstraintLayout के रूप में बेहतर होगा, लेकिन हम अभी भी वह बना सकते हैं जो आपके पास है।

समस्या यह है कि (नए Android संस्करणों पर), CardView के लिए छाया वास्तव में दृश्य की सीमा के बाहर खींची जाती है। आम तौर पर यह ठीक है, लेकिन अगर CardView माता-पिता के अंदर है, तो माता-पिता छाया दिखाने के लिए पर्याप्त जगह नहीं होने पर माता-पिता छाया को क्लिप कर सकते हैं।

आपके मामले में, "आसान फिक्स" वास्तव में बेहद आसान है। अपनी LinearLayout की चौड़ाई को match_parent में बदलें; यह कार्ड्स को उनकी परछाई खींचने के लिए जगह देगा।

संपादित करें

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

android:paddingTop="8dp"
android:paddingBottom="8dp"
android:clipToPadding="false"
6
Ben P. 3 अगस्त 2018, 00:49
शुक्रिया! यह मेरा पहला ऐप है, और मैं इसे सिर्फ कुछ एंड्रॉइड स्टूडियो सीखने के लिए बना रहा हूं, इसलिए आसान सुधारों की अनुमति है! :डी
 – 
Agustín Clemente
3 अगस्त 2018, 01:05

आपको height बदलने और layout_gravity को gravity में बदलने की जरूरत है, जैसे नीचे दिया गया कोड:

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

यह शायद आपकी समस्याओं का समाधान करेगा =]

यदि आप अपना कोड सुधारना चाहते हैं, तो मेरा सुझाव है कि आप निश्चित चौड़ाई और ऊंचाई निर्धारित न करें, यह आपको कुछ उपकरणों में समस्याएँ ला सकता है। आप अपने LinearLayout पर केवल एक बार xmlns:card_view लोड कर सकते हैं, कि यह आपका पहला टैग है

1
Kako Botasso 3 अगस्त 2018, 01:30
धन्यवाद, वे पहले से ही संरेखित हैं, लेकिन मुख्य समस्या छाया थी। अगर मैं दूसरे कार्ड_व्यू से xmlns:card_view मिटा देता हूं, तो इसकी विशेषताएं लाल हो जाती हैं ¯_(•_•)_/¯
 – 
Agustín Clemente
3 अगस्त 2018, 01:08
Android इस छाया को CardView से बनाता है। अपने पैरेंट व्यूग्रुप को wrap_content के रूप में उपयोग करने से यह पूरी छाया नहीं दिखा सकता है। इस मामले में, आप match_parent को पैरेंट व्यूग्रुप में उपयोग कर सकते हैं। और क्षमा करें, मैं LinearLayout में xmlns:card_view जोड़ने के लिए कहना भूल गया जो कि इसके लेआउट से आपका पहला टैग है। ऐसा करके आप card_view:.. उसके किसी भी बच्चे में प्रयोग कर सकते हैं =]
 – 
Kako Botasso
3 अगस्त 2018, 01:28