2011-10-07 7 views
14

मैं चाहता हूं कि मेरी गतिविधि केवल पोर्ट्रेट मोड - पोर्ट्रेट और रिवर्सपोर्ट दोनों में उपलब्ध हो। इसे कैसे प्राप्त किया जा सकता है? जब मैं android:screenOrientation="portrait" सेट करता हूं तो यह गतिविधि को सामान्य पोर्ट्रेट में ही मजबूर कर देगा - इसके विपरीत रिवर्सपोर्ट के साथ।चित्र या रिवर्स पोर्ट्रेट में गतिविधि केवल

कृपया मुझे बताएं कि यह बल/लॉक अभिविन्यास को खराब करने का एक बुरा दृष्टिकोण है। मुझे इसके बारे में पता है, लेकिन फिर भी ग्राहक इसका अनुरोध कर रहा है। समझने और किसी भी विचार के लिए धन्यवाद।

अद्यतन: एपीआई स्तर 11 और उच्च

+4

एक बुरा दृष्टिकोण IMO, कुछ ऐप्स/गेम सिर्फ सही निश्चित झुकाव में काम नहीं करेगा नहीं। – Ricky

+0

धन्यवाद रिकी, बिल्कुल। मैंने लोगों को इसी तरह के पदों पर बहस करने के बारे में देखा, इसलिए मैं यह स्पष्ट करना चाहता था कि मुझे वास्तव में केवल चित्र की आवश्यकता है। – Speedy

+0

कई ई-कॉमर्स एप्लिकेशन भी लॉक ओरिएंटेशन – Killer

उत्तर

37

आप एपीआई स्तर 9+ पर हैं, android:screenOrientation="sensorPortrait" का उपयोग करें।

Portrait orientation, but can be either normal or reverse portrait based on the device sensor. Added in API level 9.

Documentation

+0

धन्यवाद !!! मुझे अंधेरा होना चाहिए कि मुझे वह मूल्य याद आया! और हाँ, मैं एपीआई 11+ पर हूं इसलिए यह पूरी तरह से काम करता है। – Speedy

+4

मुझे एपीआई 15 पर टाइपो-एड संस्करण "सेंसरपोर्तेट" का उपयोग करना पड़ा। – Richard

+0

यह दृश्य को ठीक से घुमाता है लेकिन किसी भी घटना को आग नहीं करता है। जब सामान्य से रिवर्स व्यू में अभिविन्यास बदल जाता है तो मुझे ईवेंट को कैप्चर करने की आवश्यकता होती है। उसको कैसे करे? – StarDust

1

AndroidManifest.xml में:

android:screenOrientation="portrait|reversePortrait" 
android:configuration="keyboardHidden|orientation" 

अपने WhateverActivity.java में:

protected void onConfigurationChanged(Configuration newConfig) { 
    int currentOrientation = getResources().getConfiguration().orientation; 
    if(newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || 
     newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) { 
     super.onConfigurationChanged(newConfig); 
    } 
} 

आप इस :)

कोशिश कर सकते हैं
+0

धन्यवाद, यह एक अच्छा जवाब है, लेकिन जैसा कि मैं यह बताना भूल गया था कि मैं एपीआई 11+ (हनीकॉम) पर हूं, एलेक्स्ट का जवाब मेरे लिए अधिक उपयुक्त है और बहुत अच्छा काम करता है। और मुझे नहीं पता क्यों, लेकिन जब मैं उपयोग करने का प्रयास करता हूं तो मुझे एएपीटी त्रुटि मिली है स्क्रीन में ऑरियंटेशन इसलिए मैं दो मानों का उपयोग करने में सक्षम नहीं था लेकिन केवल एक :( – Speedy

+12

@xjaphx, एंड्रॉइड: स्क्रीनऑरिएंटेशन = "पोर्ट्रेट | रिवर्सपोर्ट"। यह काम नहीं करता है। निम्न त्रुटि प्रकट होती है: "त्रुटि: त्रुटि: स्ट्रिंग प्रकारों की अनुमति नहीं है (मूल्य 'पोर्ट्रेट | रिवर्सपोर्ट' के साथ 'स्क्रीनऑरिएंटेशन' पर)। –

+0

@PaulAnnekov Thas't क्योंकि यह एक साधारण enum है, इसलिए आप "|" का उपयोग करके मानों के संयोजन का उपयोग नहीं कर सकते –

1

भावी पीढ़ी के लिए, मैं पिछली संगतता के लिए इस का उपयोग करें ...

public final class OrientationHelper { 

    @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
    public static void setRequestedOrientationSensorPortrait(Activity activity) { 
     if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) { 
      activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 
     } else { 
      activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 
    } 

    @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
    public static void setRequestedOrientationSensorLandscape(Activity activity) { 
     if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) { 
      activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
     } else { 
      activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     } 
    } 
} 

उपयोग

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    OrientationHelper.setRequestedOrientationSensorPortrait(this); 
    super.setContentView(R.layout.my_layout); 
}