2011-01-13 35 views
125

संभव डुप्लिकेट:
How to disable orientation change in Android?स्क्रीन अभिविन्यास लॉक (Android)

मैं अलग सामग्री (गतिविधियों) के साथ टैब का उपयोग करता है एक Android आवेदन लिख रहा हूँ। इन गतिविधियों में से एक में, मैं स्क्रीन लैंडस्केप को "लैंडस्केप" -मोड, पर लॉक करना चाहता हूं लेकिन अन्य गतिविधियों में, मैं सामान्य अभिविन्यास (सेंसर के अनुसार) चाहता हूं।

क्या मैं अब कर रहा हूँ कि मैं

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

फोन कर रहा हूँ जब मैं लैंडस्केप मोड गतिविधि करने के लिए स्विच, और

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 

जब मैं अन्य गतिविधियों के लिए वापस स्विच है। हालांकि, यह काम नहीं प्रतीत होता है, पूरा एप्लिकेशन लॉक हो जाता है। इस समस्या का सामान्य दृष्टिकोण क्या है?

+14

"संभावित डुप्लिकेट" लिंक ** ** ** इस पर एक डुप्लिकेट प्रश्न नहीं है। यह सवाल पूछ रहा है कि ** ** अभिविन्यास को कैसे लॉक करें ** ताकि यह परिदृश्य से नहीं बदला जा सके। लिंक्ड सवाल यह पूछ रहा है कि जब अभिविन्यास बदलता है तो ** ** एप्लिकेशन को पुनरारंभ करने से कैसे रोकें **। – Kent

+0

ऐसा लगता है कि आप क्या चाहते हैं: https://github.com/delight-im/Android-BaseLib/blob/master/Source से 'Screen.lockOrientation (this) 'और बाद में' Screen.unlockOrientation (this) 'पर कॉल करें। /src/im/delight/android/baselib/Screen.java – caw

+0

हालांकि सावधानी बरतें, अगर आप इनलाइन ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT का उपयोग कर रहे हैं, तो इसे 4.3 से नीचे की अनुमति नहीं है। फिर आप उपरोक्त या ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT – Akshay

उत्तर

218

मैनिफेस्ट में, आप स्क्रीन ऑरेंटेशन को परिदृश्य में सेट कर सकते हैं। यह XML में कुछ इस तरह दिखेगा:

<activity android:name="MyActivity" 
android:screenOrientation="landscape" 
android:configChanges="keyboardHidden|orientation|screenSize"> 
... 
</activity> 

कहाँ MyActivity एक आप परिदृश्य में रहना चाहते है।

android:configChanges=... लाइन onResume(), onPause() को स्क्रीन घुमाने पर कॉल होने से रोकती है। इस पंक्ति के बिना, आपके अनुरोध के अनुसार रोटेशन रहेगा लेकिन कॉल अभी भी किए जाएंगे।

नोट: keyboardHidden और orientation < एंड्रॉयड 3.2 (एपीआई स्तर 13) के लिए आवश्यक हैं, और सभी तीन विकल्पों में 3.2 या इसके बाद के संस्करण, न सिर्फ orientation आवश्यक हैं।

+0

का उपयोग कर सकते हैं यह काम नहीं कर रहा है; क्या मैं कुछ भूल रहा हूँ? – user573536

+3

हम्म हाँ आप सही हैं जो काम नहीं लग रहा है अगर गतिविधि TabHost के अंदर चल रही है। मुझे लगता है कि आपके पास 'setRequestedOrientation' का उपयोग करके सही विचार हो सकता है, लेकिन कॉल को' ऑनर्यूम ', * नहीं * 'क्रिएट' में डालने का प्रयास करें, और गैर-परिदृश्य गतिविधि में' SENSOR' के बजाय 'ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED' का उपयोग करें। मेरा एमुलेटर सेंसर के साथ भी खराब हो गया, लेकिन अनिर्दिष्ट काम –

+0

सेवा के लिए परिभाषित अभिविन्यास का कोई तरीका है .. मूल रूप से मैं एक लाइववैलपेपर सेवा लिखता हूं ... जहां डिवाइस अभिविन्यास को प्रतिबंधित करने की आवश्यकता है। – CoDe

52

मुझे एक ही समस्या थी।

जब मैं

<activity android:name="MyActivity" android:screenOrientation="landscape"></activity> 

में प्रवेश किया मैनिफ़ेस्ट फ़ाइल में इस वजह से कि गतिविधि परिदृश्य में प्रदर्शित करने के लिए। हालांकि जब मैं पिछली गतिविधियों में लौट आया तो वे लेंसस्केप में प्रदर्शित हुए, भले ही वे चित्र पर सेट किए गए हों। हालांकि

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

तुरंत बाद लक्ष्य गतिविधि की OnCreate अनुभाग समस्या हल हो गई जोड़कर। तो अब मैं दोनों तरीकों का उपयोग करता हूं।

+1

हालांकि, अगर आप ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT का उपयोग कर रहे हैं, तो बस एक सावधानी बरतें, इसे 4.3 से नीचे की अनुमति नहीं है। इसके बाद आप उपरोक्त या ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT – Akshay

+0

चेतावनी का उपयोग कर सकते हैं: setRequestedOrientation() का उपयोग करने से गतिविधि को पुनरारंभ करना होगा, दो बार रेज़्यूम आदि पर ट्रिगर करना होगा। इसे प्रत्येक गतिविधि के लिए अपने मैनिफेस्ट में जोड़ें जहां आप इसे टालने के लिए करते हैं: एंड्रॉइड: configChanges = "keyboardHidden | ओरिएंटेशन | स्क्रीन साइज" – bluehallu

27

अपनी परियोजना के Android मेनिफेस्ट फ़ाइल के अंदर,, जिनकी आप उन्मुखीकरण को ठीक करने और कोड का निम्न भाग जोड़ना चाहते हैं की गतिविधि घोषणा खोजने के

android:screenOrientation="landscape" 
लैंडस्केप ओरिएंटेशन के लिए

और चित्र के लिए निम्न कोड जोड़ने ,

android:screenOrientation="portrait" 
संबंधित मुद्दे