मैं चित्र और परिदृश्य अभिविन्यास के लिए अलग-अलग लेआउट कैसे निर्दिष्ट करूं?


142

मैंने एक गतिविधि के लिए दो अलग-अलग लेआउट xml फ़ाइलों को निर्दिष्ट करने में सक्षम होने के लिए संदर्भ देखा है, एक पोर्ट्रेट के लिए और एक लैंडस्केप के लिए। हालांकि यह कैसे करना है, इसके बारे में मुझे कोई जानकारी नहीं मिली है। मैं प्रत्येक गतिविधि के लिए कैसे निर्दिष्ट करूं कि कौन सी xml फाइल यह पोर्ट्रेट लेआउट है और जो लैंडस्केप लेआउट है?

क्या विभिन्न स्क्रीन आकारों के लिए अलग-अलग लेआउट निर्दिष्ट करना संभव है? यदि हां, तो यह कैसे किया जाता है?

जवाबों:


203

एक layout-landनिर्देशिका बनाएं और अपने लेआउट XML फ़ाइल के परिदृश्य संस्करण को उस निर्देशिका में रखें।


3
क्या इसका मतलब यह है कि अगर मैं ऐसा करता हूं तो सभी गतिविधियों को परिदृश्य और चित्र दृश्य दोनों को परिभाषित करने की आवश्यकता है?
जे एसेरेन

20
नहीं, यदि कोई लेआउट-लैंड परिभाषा मौजूद नहीं है, तो यह मानक लेआउट निर्देशिका में XML लेआउट का उपयोग करता है।
मार्क बी

मेरे मामले में, लेआउट-लैंड काम नहीं कर रहा है जब मैं उपयोग कर रहा हूं, एंड्रॉइड: configChanges = "ओरिएंटेशन | कीबोर्डहाइन्ड | स्क्रीनाइज़ करें"
तुषार पांडे

9
Android से ओरिएंटेशन निकालें: configChanges = "ओरिएंटेशन | कीबोर्डहेड्ड | स्क्रीनसाइज़"
Ushal Naidoo

60

आपको बस इसे अलग-अलग नामों से अलग-अलग फ़ोल्डर में रखना होगा, जो कि अभिविन्यास और रिज़ॉल्यूशन के आधार पर अलग-अलग नामों से होगा, डिवाइस अपने स्क्रीन सेटिंग्स के लिए स्वचालित रूप से सही का चयन करेगा

अधिक जानकारी यहाँ:

http://developer.android.com/guide/practices/screens_support.html

"स्क्रीन आकार और घनत्व के लिए संसाधन निर्देशिका क्वालिफायर" के तहत


केवल ओएस संस्करण 1.6 या उच्चतर के लिए काम करता है। यदि आप 1.5 का समर्थन करना चाहते हैं, तो आपको इस लिंक की आवश्यकता है: developer.android.com/guide/practices/screens-support-1.5.html
स्कॉट बिग्स

2
@ सिल्वियो डोनिनी - लिंक के पास अब आवश्यक जानकारी नहीं है।
itsaboutcode

2
@itsaboutcode हाँ यह करता है: "कॉन्फ़िगरेशन क्वालिफायर का उपयोग करना" पर जाएं
दान 11

27

माउस प्रेमियों के लिए! मैं कहता हूं कि संसाधन फ़ोल्डर पर राइट क्लिक करें Add new resource file, और उपलब्ध क्वालिफायर से चुनें orientation:

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


लेकिन फिर भी आप इसे मैन्युअल रूप से कह सकते हैं, उप-फ़ोल्डर "लेआउट-लैंड" को जोड़कर

"आपका-परियोजना निर्देशिका \ एप्लिकेशन \ src \ मुख्य \ रेस"

तब से इस उप-फ़ोल्डर के तहत कोई भी लेआउट। xml फ़ाइल केवल स्वचालित रूप से लैंडस्केप मोड के लिए काम करेगी ।

पोर्ट्रेट मोड के लिए "लेआउट-पोर्ट" का उपयोग करें।


1
इसने मेरे लिए काम किया। मैंने एक नया लेआउट फ़ाइल जोड़ा जैसा कि चित्र संस्करण के समान नाम के साथ निर्देश दिया गया है। एंड्रॉइड स्टूडियो ने स्वचालित रूप से उस लेआउट के लिए एक फ़ोल्डर बनाया। चित्र के लिए एक लेआउट और परिदृश्य के लिए दूसरा। स्क्रीन को घुमाने पर नया लेआउट अपने आप प्रदर्शित हो जाता है।
स्मिट्टी-वेर्बन-जार्ज-मैनजेंसन

23

याद दिलाने हेतु:

अपनी प्रकट फ़ाइल में गतिविधि के लिए विशेषता orientationसे निकालें यदि आपने इसे परिभाषित किया है:android:configChangesxml

android:configChanges="orientation|screenLayout|screenSize"

1
क्या होगा अगर मेरे पास एंड्रॉइड होना चाहिए: configChanges = "ओरिएंटेशन | screenLayout | screenSize" मेरे प्रकट रूप में, मेरे कुछ अंश दोनों अभिविन्यास में हो सकते हैं और कुछ नहीं, लेकिन फिर भी उन बदलावों के लिए परिदृश्य और चित्र के लिए अलग-अलग लेआउट की आवश्यकता होती है जो अभिविन्यास गतिशील रूप से बदल सकते हैं?
नटंसलदा

9

Android Studio 3.xx और Android Studio 4.xx के लिए सबसे तेज़ तरीका

1. गतिविधि लेआउट के डिज़ाइन टैब पर जाएं

2. शीर्ष पर आपको पूर्वावलोकन बटन के लिए अभिविन्यास पर प्रेस करना चाहिए, एक परिदृश्य लेआउट (चेक छवि) बनाने का विकल्प है, उस विशेष अभिविन्यास के लिए एक नया फ़ोल्डर आपके xml लेआउट फ़ाइल के रूप में बनाया जाएगा।

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


4

मुझे लगता है कि नवीनतम Android संस्करणों में सबसे आसान तरीका एक XML (पाठ नहीं) के डिज़ाइन मोड में जा रहा है।

फिर मेनू से, विकल्प चुनें - लैंडस्केप विविधता बनाएं। यह कुछ सेकंड में बिना किसी परेशानी के लैंडस्केप xml बना देगा। नवीनतम एंड्रॉइड स्टूडियो संस्करण आपको तुरंत एक लैंडस्केप दृश्य बनाने की अनुमति देता है।

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

मुझे उम्मीद है कि यह आपके लिए काम करेगा।


3

एक नई निर्देशिका बनाएं layout-land, फिर xmlउसी नाम से फ़ाइल बनाएं layout-landक्योंकि यह layoutनिर्देशिका थी और लैंडस्केप मोड के लिए आपकी सामग्री को संरेखित करें।

ध्यान दें कि दोनों में सामग्री की आईडी xmlसमान है।


3

नीचे की अंतिम पंक्ति दो क्वांटिफायर लगाने के लिए एक उदाहरण है: परिदृश्य और सबसे छोटी चौड़ाई (600dp) स्क्रीन। 600dp को अपनी ज़रूरत के अनुसार अपडेट करें।

res/layout/main_activity.xml                # For handsets
res/layout-land/main_activity.xml           # For handsets in landscape
res/layout-sw600dp/main_activity.xml        # For 7” tablets
res/layout-sw600dp-land/main_activity.xml   # For 7” tablets in landscape

उपरोक्त डिमन्स पर भी लागू होता है

res/values/dimens.xml                # For handsets
res/values-land/dimens.xml           # For handsets in landscape
res/values-sw600dp/dimens.xml        # For 7” tablets
res/values-sw600dp-land/dimens.xml   # For 7” tablets in landscape

एक उपयोगी उपकरण मैट्रिक्स: https://material.io/tools/devices/


2

या इसका उपयोग करें:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:scrollbars="vertical" 
            android:layout_height="wrap_content" 
            android:layout_width="fill_parent">

  <LinearLayout android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

     <!-- Add your UI elements inside the inner most linear layout -->

  </LinearLayout>
</ScrollView>

0
  1. राइट क्लिक करें फ़ोल्डर,
  2. नई -> Android संसाधन फ़ाइल
  3. उपलब्ध क्वालिफायर में, ओरिएंटेशन चुनें,
  4. चुना क्वालिफायर में जोड़ें
  5. स्क्रीन ओरिएंटेशन में, लैंडस्केप चुनें
  6. ओके दबाओ

एंड्रॉइड स्टूडियो 3.4.1 का उपयोग करते हुए, यह अब layout-landफ़ोल्डर नहीं बनाता है । यह एक फ़ोल्डर बनाएगा और दो लेआउट फ़ाइलों को एक साथ रखेगा।

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


2
गलत। आप फ़ोल्डर दृश्य मोड (जैसे "प्रोजेक्ट") का उपयोग नहीं कर रहे हैं। आप शायद "एंड्रॉइड" व्यू मोड का उपयोग कर रहे हैं, जो समूह आपके स्क्रीनशॉट की तरह वर्चुअल फ़ोल्डरों में एक साथ फाइल करते हैं, लेकिन वास्तविक फ़ोल्डर संरचना अभी भी है कि यहां हर दूसरा पोस्ट कैसे वर्णन करता है।
monK_
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.