मैं सामग्री कार्ड और उसकी छाया के साथ एक मौसम ऐप बना रहा हूं। मैंने एक रैखिक लेआउट का उपयोग करके उन्हें केंद्रित करने का एक तरीका ढूंढ लिया है, लेकिन यह छाया को काट देता है। मेरे द्वारा इसे कैसे रोका जा सकता है? क्या रैखिक लेआउट या फ्रेम लेआउट का उपयोग किए बिना उन्हें संरेखित करने का कोई तरीका है?
यहाँ मेरा लेआउट कोड है: मैंने रूट के रूप में एक 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"/>
2 जवाब
ऐसा लगता है कि आपका लेआउट FrameLayout
के बजाय ConstraintLayout
के रूप में बेहतर होगा, लेकिन हम अभी भी वह बना सकते हैं जो आपके पास है।
समस्या यह है कि (नए Android संस्करणों पर), CardView
के लिए छाया वास्तव में दृश्य की सीमा के बाहर खींची जाती है। आम तौर पर यह ठीक है, लेकिन अगर CardView
माता-पिता के अंदर है, तो माता-पिता छाया दिखाने के लिए पर्याप्त जगह नहीं होने पर माता-पिता छाया को क्लिप कर सकते हैं।
आपके मामले में, "आसान फिक्स" वास्तव में बेहद आसान है। अपनी LinearLayout
की चौड़ाई को match_parent
में बदलें; यह कार्ड्स को उनकी परछाई खींचने के लिए जगह देगा।
संपादित करें
मैंने ऊपर जो कहा वह प्रत्येक कार्ड के किनारों पर छाया को हल करेगा, लेकिन शीर्ष कार्ड के ऊपर या नीचे कार्ड के नीचे छाया को हल नहीं करेगा। फिर से, एक त्वरित सुधार की भावना में, मैं इन विशेषताओं को आपके LinearLayout में जोड़ने का सुझाव दूंगा:
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:clipToPadding="false"
आपको 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
लोड कर सकते हैं, कि यह आपका पहला टैग है
wrap_content
के रूप में उपयोग करने से यह पूरी छाया नहीं दिखा सकता है। इस मामले में, आप match_parent
को पैरेंट व्यूग्रुप में उपयोग कर सकते हैं। और क्षमा करें, मैं LinearLayout में xmlns:card_view
जोड़ने के लिए कहना भूल गया जो कि इसके लेआउट से आपका पहला टैग है। ऐसा करके आप card_view:..
उसके किसी भी बच्चे में प्रयोग कर सकते हैं =]
संबंधित सवाल
नए सवाल
android
एंड्रॉइड Google का मोबाइल ऑपरेटिंग सिस्टम है, जिसका उपयोग प्रोग्रामिंग या डिजिटल डिवाइस (स्मार्टफोन, टैबलेट, ऑटोमोबाइल्स, टीवी, वियर, ग्लास, IoT) को विकसित करने के लिए किया जाता है। एंड्रॉइड से संबंधित विषयों के लिए, एंड्रॉइड-विशिष्ट टैग जैसे कि एंड्रॉइड-इरादे, एंड्रॉइड-गतिविधि, एंड्रॉइड-एडॉप्टर आदि का उपयोग करें। विकास या प्रोग्रामिंग के अलावा अन्य प्रश्नों के लिए, लेकिन एंड्रॉइड फ्रेमवर्क से संबंधित हैं, इस लिंक का उपयोग करें: https: // android.stackexchange.com।
<LinearLayout>
अंदर क्या है? यदि हम संपूर्ण लेआउट देख सकते हैं तो इसका उत्तर देना आसान होगा।