2012-03-21 4 views
11

में स्क्रीन अभिविन्यास और मान I परिदृश्य या चित्र में मेरे रूप में सभी गतिविधियों का उपयोग करना चाहते हैं। जब उपयोगकर्ता अभिविन्यास का चयन करता है - यह सभी गतिविधियों के लिए मान्य है। "पीछे" विकल्प अभिविन्यास के साथ प्रयास किया। Google के अनुसार - अभिविन्यास पिछली गतिविधि पर निर्भर करेगा। मेरी पहली गतिविधि उपयोगकर्ता अभिविन्यास से चयनित सेट करने के लिए setRequestedOrientation का उपयोग करती है। अगली गतिविधियों को समान उन्मुखीकरण का पालन करना होगा। क्या मुझे अपने कोड में setRequestedOrientation भी रखना है? या manifet में 'पीछे' पैरामीटर पर भरोसा करते हैं? SetRequestedOrientation को फिर से बनाने के कारण हो सकता है?manifest.xml

अद्यतन: कोशिश की "चित्र" और setRequestedOrientation() - resilt si onCreate को 2 बार कहा जाता था। समस्या अगली गतिविधि में है -> पहली गतिविधि में "चित्र" की वजह से - एंड्रॉइड ने उसी गतिविधि के साथ अगली गतिविधि शुरू की। यह ध्यान नहीं देता "परिदृश्य" उन्मुखीकरण जो मुझे :(द्वारा स्थापित किया गया था

उत्तर

0

अभी के लिए मैं onCreate में जाँच कर दिया:

m_bSkip = (this.getRequestedOrientation() != MyApp.sInstance.GetScreenOrientation()); 
if (m_bSkip) 
    return; 

जब मैं OnCreate दर्ज करें और स्क्रीन अभिविन्यास वांछित नहीं है - बाहर निकलें। जब मैं क्रेट और स्क्रीन अभिविन्यास में प्रवेश करता हूं तो वांछित होता है - प्रारंभिकरण के साथ जारी रखें। यह गतिविधि से संबंधित एसिंक कार्य को रखने की आवश्यकता के बिना स्थिति को ठीक करता है और नई गतिविधि की जांच करता है। बेशक सभी फ़ंक्शंस: ऑनस्टार्ट, ऑनर्यूम, ऑन पॉसडे, ऑनस्टॉप ... को नल पॉइंटर अपवाद से बचने के लिए इस ध्वज को जांचना होगा।

16

आप अपनी गतिविधियों के लिए तय उन्मुखीकरण करना चाहते हैं तो आप use- कर सकते हैं

एंड्रॉयड: screenOrientation = "चित्र"

android:screenOrientation="sensorPortrait" 

उस मैनिफेस्ट में उस गतिविधि के लिए एक विशेषता के रूप में। लेकिन यदि आप एप्लिकेशन लॉन्च करते समय पिछले अभिविन्यास के आधार पर अभिविन्यास रनटाइम सेट करना चाहते हैं, तो आपको पिछले पैरामीटर को onCreate() में जांचना होगा और फिर उसे उस मान पर सेट करना होगा प्रोग्रामेटिक रूप से आप खुद ही गाना setRequestedOrientation()

अद्यतन: गोलियाँ पर एक बेहतर समर्थन के लिए उपयोग android:screenOrientation="sensorPortrait" s.co.tt @ द्वारा बताया के रूप में।

android:screenOrientation के लिए अलग मान और क्या उनमें से प्रत्येक के कर के बारे में अधिक जानकारी के लिए, डॉक्स को देखो:

https://developer.android.com/guide/topics/manifest/activity-element.html#screen

+0

इससे क्रेट को दो बार बुलाया जाएगा :(और समस्या यहां खत्म नहीं होती है। अगली एक्टिविटी स्टार्टर के रूप में चित्रों के चित्र के रूप में स्टार्टर है। एंड्रॉइड वर्तमान स्थिति/परिदृश्य/ – Kostadin

+0

को अनदेखा करता है मैंने कोड को डीबग करने का प्रयास किया। सभी हिट 'ऑन क्रेट() 'दो बार नहीं। और अगली गतिविधि अभिविन्यास प्राप्त करने के लिए' ऑनक्रेट() 'में एक ही कोड का पालन करेगी। – Rajkiran

+5

' चित्र 'का उपयोग न करें। कुछ टैबलेट (और शायद अन्य डिवाइस) पर आपकी गतिविधि ऊपर-नीचे प्रदर्शित होगा, क्योंकि उन डिवाइसों का मानना ​​है कि सही डिफ़ॉल्ट पोर्ट्रेट अभिविन्यास होना चाहिए। 'सेंसर पोर्ट्रेट' (या पुराने एपीआई में, गलत वर्तनी 'सेंसरपोर्तेट') आपकी सामग्री को चित्र में ही दिखाएगी, लेकिन इसे रास्ते से मिलान करने के लिए घुमाएगी जिसमें डिवाइस उपयोगकर्ता द्वारा आयोजित किया जाता है। –

0

मेरे अनुभव से मैं onCreate विधि में हर गतिविधि में setRequestedOrientation करने की सिफारिश करेंगे, onCreate इसे फिर से नहीं बुलाया जाएगा यह सुरक्षित है।

+0

मैनिफेस्ट में 'पोर्ट्रेट' सेट करने के बाद सेट करें और कॉल सेट प्रोक्वेटेडऑरिएंटेशन() - ऑनक्रेटवेस दो बार बुलाया जाता है :(/ वर्तमान और प्रर्वित अभिविन्यास एक ही/ – Kostadin

+0

बन गया, मैंने सोचा कि आप उदाहरण के लिए 'पोर्ट्रेट' के लिए ठीक हैं और गतिविधि पर जाएं जो 'पोर्ट्रेट' भी सेट करता है यदि उपयोगकर्ता डिवाइस को घुमाता है तो अभिविन्यास परिवर्तन को संरक्षित करने का तरीका। यदि एक ओरिएंटेशन से दूसरे ओर जाता है - निश्चित रूप से ऑनक्रेट दोहराया जाएगा। क्या आप अपने उपयोग के मामले का अधिक विस्तृत वर्णन कर सकते हैं। –

+0

फर्स्टा गतिविधि शुरू हो गई है, लेकिन मेरी सेटिंग के आधार पर अभिविन्यास सेट करना होगा मैंने सेटिंग्स को पढ़ा है और पहले गतिविधि/ऑन्रेट ऑन क्रिएट/ऑन करें। फिर दूसरी गतिविधि शुरू करें। दूसरी गतिविधि को "पीछे" ध्वज के कारण समान अभिविन्यास होना चाहिए। लेकिन दूसरी गतिविधि में अभिविन्यास में पहले जैसा ही घोषित किया गया है। – Kostadin

7
<activity 
      android:name=".Android_mobile_infoActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
+0

दिखाया गया है, एक अच्छा विचार नहीं है –

0

, एंड्रॉयड प्रकट संपादक के पास जाओ वहाँ नीचे आप उस पर MainActivity.java क्लिक देखेंगे, सही करने के लिए - आप एक नई विंडो देखेंगे: नीचे स्क्रॉल करें और चयन ओरिएंटेशन चुन - "चित्र"

1

कर प्रोग्रामेटिक रूप से, उदाहरण के लिए एक गतिविधि बेस क्लास

मैंने अपने कामकाजी मोबाइल और टैबलेट को आजमाया। किसी भी चित्र या परिदृश्य का उपयोग करें।दिखाया गया है android:configChanges="orientation|screenSize" तहत <activity> टैग: आवेदन टैग के अंदर

@Override 
public void onCreate(Bundle savedInstanceState) { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    //or 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 

Manifest.xml

<activity 
     android:name=".Login_Activity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" /> 

या

<activity 
     android:name=".Login_Activity" 
     android:label="@string/app_name" 
     android:screenOrientation="landscape" /> 
0

अभिविन्यास में परिवर्तनों को संभाल करने के लिए, AndroidManifest.xml में निम्नलिखित पंक्ति जोड़ नीचे: -

<application 
     android:allowBackup="true" 
     ---------- 
     ---------- > 
     <activity android:name=".MainActivity" 
      android:configChanges="orientation|screenSize"> 
     ---------- 
     </activity> 
     ---------- 
    </application> 

नोट: जब भी विन्यास में कोई परिवर्तन होता है जैसे orientation, screenLayout, screenSize, आदि, गतिविधि पुन: प्रारंभ होने और उसके onCreate विधि कहा जाता है। इसे रोकने के लिए, हमें कॉन्फ़िगरेशन में किसी भी बदलाव को संभालना होगा।

संबंधित मुद्दे