मेरे पास एक ऐप है जो केवल पोर्ट्रेट मोड में काम करता है, और मैंने पोर्ट्रेट होने के लिए हर गतिविधि के लिए अपनी मैनिफ़ेस्ट फ़ाइल में परिवर्तन किए हैं। लेकिन जब मैं डिवाइस को घुमाता हूं, तो गतिविधि फिर से हो जाती है। गतिविधि को कैसे नष्ट न करें?
मेरे पास एक ऐप है जो केवल पोर्ट्रेट मोड में काम करता है, और मैंने पोर्ट्रेट होने के लिए हर गतिविधि के लिए अपनी मैनिफ़ेस्ट फ़ाइल में परिवर्तन किए हैं। लेकिन जब मैं डिवाइस को घुमाता हूं, तो गतिविधि फिर से हो जाती है। गतिविधि को कैसे नष्ट न करें?
जवाबों:
के लिए एपीआई 12 और नीचे : ऐड
android:configChanges="orientation"
यदि आप API 13 या इसके बाद के संस्करण को लक्षित कर रहे हैं तो "स्क्रीनसाइज़" जोड़ें क्योंकि जब भी आपका अभिविन्यास बदलता है तो आपकी स्क्रीन का आकार बदल जाता है, अन्यथा नए उपकरण आपकी गतिविधि को नष्ट करते रहेंगे। "स्क्रीनसाइज़" का उपयोग करने के बारे में अधिक जानकारी के लिए अंडे का उत्तर नीचे देखें
android:configChanges="orientation|screenSize"
AndroidManifest.xml में अपनी गतिविधि के लिए। इस तरह आपकी गतिविधि फिर से शुरू हो जाएगी। अधिक जानकारी के लिए दस्तावेज़ देखें
आधिकारिक दस्तावेज से फ्लिन ने कहा,
नोट: यदि आपका एप्लिकेशन एपीआई स्तर 13 या उच्चतर (जैसा कि मिन्सडेकवर्सन और टार्गेटवेडवर्जन विशेषताओं द्वारा घोषित किया गया है) को लक्षित करता है, तो आपको "स्क्रीनसाइज़" कॉन्फ़िगरेशन भी घोषित करना चाहिए, क्योंकि यह तब भी बदलता है जब कोई उपकरण पोर्ट्रेट और लैंडस्केप ओरिएंटेशन के बीच बदल जाता है।
इसलिए यदि आपका ऐप एपीआई स्तर 13 या उच्चतर को लक्षित करता है, तो आपको इसके बजाय यह कॉन्फ़िगरेशन सेट करना चाहिए:
android:configChanges="orientation|screenSize"
सही समाधान है
android:configChanges="orientation|screenSize"
Android प्रलेखन:
वर्तमान उपलब्ध स्क्रीन आकार बदल गया है। यह वर्तमान पहलू अनुपात के सापेक्ष वर्तमान में उपलब्ध आकार में बदलाव का प्रतिनिधित्व करता है, इसलिए जब उपयोगकर्ता परिदृश्य और चित्र के बीच बदल जाएगा तो बदल जाएगा। हालाँकि, यदि आपका एप्लिकेशन API स्तर 12 या उससे कम को लक्षित करता है, तो आपकी गतिविधि हमेशा इस कॉन्फ़िगरेशन परिवर्तन को संभालती है (यह कॉन्फ़िगरेशन परिवर्तन आपकी गतिविधि को पुनरारंभ नहीं करता है, भले ही एंड्रॉइड 3.2 या उच्चतर डिवाइस पर चल रहा हो)। * *
मैं इसे थोड़ा गड़बड़ कर रहा था और फिर इस बात पर भरोसा किया कि मैनिफेस्ट फ़ाइल के अंदर मैं एप्लिकेशन स्तर पर कॉन्फिगरेशन को डाल रहा था न कि एक्टिविटी लेवल पर। जब मेरे लिए यह सही ढंग से काम कर रहा है तो कोड कैसा दिखता है।
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
अब जब Android विभाजित स्क्रीन (एंड्रॉइड पार्लियामेंट में "मल्टी-विंडो") का समर्थन करता है, तो आप शायद स्क्रीन जोड़ना चाहेंगे। smallestScreenSize | screenLayout | ओरिएंटेशन भी। तो रोटेशन और स्प्लिट स्क्रीन को संभालने के लिए आप एंड्रॉइड में कुछ इस तरह चाहते हैं: configChanges
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
फ्लोटिंग इमेज में इस कोड को देखें। यह स्क्रीन रोटेशन को संभालने का सबसे दिलचस्प तरीका है। http://code.google.com/p/floatingimage/source/browse/#svn/trunk/floatingimage/src/dk/nindroid/rss/orientation
मेनिफेस्ट में लिखें:
android:configChanges="orientation|screenSize|keyboardHidden"
और आपकी समस्या को हल करने वाली गतिविधि में इसे ओवरराइड करें:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}