केवल पोर्ट्रेट मोड में संपूर्ण एप्लिकेशन कैसे सेट करें?


201

मैं इसे कैसे सेट कर सकता हूं ताकि एप्लिकेशन केवल पोर्ट्रेट मोड में चल रहा हो? मैं चाहता हूं कि एप्लिकेशन चलने के दौरान परिदृश्य मोड अक्षम हो। मैं इसे प्रोग्रामेटिक रूप से कैसे करूँ?

जवाबों:


293

किसी भी Android संस्करण के लिए

XML से

आप android:screenOrientation="portrait"अपने मेनिफ़ेस्ट.xml फ़ाइल में प्रत्येक गतिविधि के लिए निर्दिष्ट कर सकते हैं । आप इस विकल्प को applicationटैग पर निर्दिष्ट नहीं कर सकते ।

जावा से

अन्य विकल्प इसे प्रोग्रामेटिक रूप से करना है, उदाहरण के लिए Activityबेस क्लास में:

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

Android के लिए 4+ (एपीआई 14+)

अंतिम विकल्प इसे गतिविधि जीवनचक्र श्रोताओं के साथ करना है जो केवल एंड्रॉइड 4.0 (एपीआई 14+) के बाद से उपलब्ध है। सब कुछ एक कस्टम Applicationवर्ग में होता है :

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}

ActivityLifecycleAdapterसिर्फ एक सहायक वर्ग है जिसे आपको बनाने की आवश्यकता होगी जो कि एक खाली कार्यान्वयन होगा ActivityLifecycleCallbacks(इसलिए आपको उस इंटरफ़ेस के प्रत्येक और हर तरीके को ओवरराइड नहीं करना होगा जब आपको बस उनमें से एक की आवश्यकता होगी)।


1
यह काम नहीं कर रहा है। जब मैंने डिवाइस चालू किया तो यह लैंडस्केप मोड में बदल जाता है। और कोड में अधिक बात मैं इन setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) का उपयोग कर रहा हूं; setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR); प्रगति बार के लिए निर्देश। इन निर्देशों के साथ कोई समस्या है?
नरेश

यह काम कर रहा है। एक और बात अपने कोडिंग भाग में दो निर्देशों के ऊपर नहीं डालें। इसका मतलब है कि यह सेंसर को स्क्रीन ओरिएंटेशन बदलने में सक्षम बनाता है।
नरेश

3
-1: पूछने वाले ने विशेष रूप से अनुरोध किया कि यह कैसे करें // प्रोग्रामेटिक रूप से //, और पूरे एप्लिकेशन के लिए (जो मुझे विश्वास दिलाता है कि वे इसे प्रत्येक गतिविधि के लिए व्यक्तिगत रूप से नहीं करना चाहते हैं)।
jwir3

@ jwir3, मैं असहमत हूं। "प्रोग्रामिंग" केवल कोड कोड नहीं लिख रहा है, यह सभी मेटा फ़ाइलों, आपके द्वारा उपयोग किए जाने वाले संसाधनों, आईडीई की अज्ञातताओं के आसपास काम करना आदि भी है। यह एक अच्छा उत्तर है, समस्या को हल करता है और ओपी ने इसे सही रूप में चिह्नित किया था। मूल प्रश्न के लिए स्पष्ट रूप से पर्याप्त उत्तर।
जेम्स वेबस्टर

9
LifeCycleCallbacks पद्धति का उपयोग करने से आपके द्वारा अपनी डिवाइस (सामान्य स्थिति क्या होगी) लैंडस्केप मोड को होल्ड करने पर आपको गतिविधि लॉन्च में देरी होगी। मुझे लगता है कि यह इसलिए है क्योंकि डिवाइस कुछ समय के लिए लैंडस्केप मोड में वापस आ जाते हैं और गतिविधियों को संभालते हैं। मैनिफ़ेस्ट में ओरिएंटेशन सेट करने से यह प्रभाव नहीं पड़ता है।
बेनामी

142

हां आप यह प्रोग्राम प्रोग्रामिक रूप से कर सकते हैं और आपकी सभी गतिविधियों के लिए एक एब्सट्रैक्टिविटी बना सकते हैं जो आपकी सभी गतिविधियाँ बढ़ाती हैं।

public abstract class AbstractActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

इस अमूर्त गतिविधि का उपयोग वैश्विक मेनू के लिए भी किया जा सकता है।


3
नोट: मेरा मानना ​​है कि ActivityInfo.SCREEN_ORIENTATION_NOSENSORइसका बेहतर उत्तर होना चाहिए क्योंकि यह डिवाइस को डिफ़ॉल्ट स्थिति में छोड़ने का इरादा है क्योंकि कुछ उपकरणों में पोर्ट्रेट ओरिएंटेशन नहीं है। हालांकि, 'नोसेंसर' मेरे लिए काम नहीं करता है, इसलिए @ आर्कन का जवाब मेरे लिए है।
डेविड मैनपेल

104

आप अपनी सारी गतिविधियों के लिए एक सामान्य आधार वर्ग का विस्तार किए बिना अपने पूरे आवेदन के लिए ऐसा कर सकते हैं ।

चाल यह सुनिश्चित करने के लिए है कि आप Applicationअपनी परियोजना में एक उपवर्ग शामिल करें। इसमें onCreate(), जब आपका ऐप पहली बार शुरू होता है, तो आप ActivityLifecycleCallbacksगतिविधि जीवन चक्र की घटनाओं की सूचनाएँ प्राप्त करने के लिए एक ऑब्जेक्ट (एपीआई स्तर 14+) पंजीकृत करते हैं।

यह आपको अपने कोड को निष्पादित करने का अवसर देता है जब भी आपके ऐप में कोई भी गतिविधि शुरू होती है (या बंद हो जाती है, या फिर से शुरू हो जाती है, या जो भी हो)। इस बिंदु पर आप setRequestedOrientation()नई बनाई गई गतिविधि पर कॉल कर सकते हैं ।

class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();  

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, 
                                          Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            }

            ....

        });

    }
}

9
यह एकमात्र उत्तर है जो प्रश्न को संबोधित करता है। उन सभी पर शासन करने के लिए एक पंक्ति।
शमूएल

2
* उन सभी पर शासन करने के लिए एक वर्ग।
जे मायू

3
और प्रकट एप्लिकेशन रूट में जोड़ना कभी न भूलें। Android: name = "। MyApp"
फैसल नसीर

2
यह दृष्टिकोण गतिविधि के onCreate () को दो बार कहता है।
संदीप आर

3
समस्या तब होती है जब आप डिवाइस को क्षैतिज रूप से पकड़ते हैं और नई गतिविधि शुरू करते हैं, यह लैंडस्केप ओरिएंटेशन में प्रकट होता है और फिर चित्र के लिए घूमता है। पोर्ट्रेट अभिविन्यास में पूर्ण ऐप को लॉक करने का एकमात्र अच्छा तरीका लगता है कि मैनिफेस्ट में प्रत्येक संवेदनशीलता को चिह्नित करना है।
Den

42

आप इसे अपनी मैनिफ़ेस्ट फ़ाइल में सेट कर सकते हैं।

android:name=".your launching activity name"
android:screenOrientation="portrait"

और आप अपनी कक्षा की फ़ाइल में कोड लिखकर भी इसे प्राप्त कर सकते हैं जैसे:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

1
@ naresh pls स्वीकार करें अगर आपकी जरूरत के अनुसार कोई समाधान मिला तो यह आपकी रेटिंग को भी
गति देगा

24

Android जोड़ें: ScreenOrientation = "पोर्ट्रेट" AndroidManifest.xml में गतिविधि के लिए। उदाहरण के लिए:

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

25
उन्होंने कहा कि आवेदन गतिविधि नहीं है।
रेइनहार्ड

10

उपयोग:

android:screenOrientation="portrait" 

प्रत्येक गतिविधि में अपने आवेदन की मैनिफ़ेस्ट फ़ाइल में इस लाइन को लिखें, जिसे आप केवल पोर्ट्रेट मोड में दिखाना चाहते हैं।


8

हर गतिविधि के लिए इसे अपनी मैनिफ़ेस्ट फ़ाइल में लिखें:

android:screenOrientation="portrait" 

2

Android डेवलपर गाइड से:

"अभिविन्यास" स्क्रीन ओरिएंटेशन बदल गया है - उपयोगकर्ता ने डिवाइस को घुमाया है। नोट: यदि आपका एप्लिकेशन एपीआई स्तर 13 या उच्चतर (जैसा कि मिन्सडेकवर्सन और टार्गेटवेडवर्जन विशेषताओं द्वारा घोषित किया गया है) को लक्षित करता है, तो आपको "स्क्रीनसाइज़" कॉन्फ़िगरेशन भी घोषित करना चाहिए, क्योंकि यह तब भी बदलता है जब कोई उपकरण पोर्ट्रेट और लैंडस्केप ओरिएंटेशन के बीच बदल जाता है।

"screenSize" वर्तमान में उपलब्ध स्क्रीन आकार बदल गया है। यह वर्तमान पहलू अनुपात के सापेक्ष वर्तमान में उपलब्ध आकार में परिवर्तन का प्रतिनिधित्व करता है, इसलिए जब उपयोगकर्ता परिदृश्य और चित्र के बीच बदल जाएगा तो बदल जाएगा। हालाँकि, यदि आपका एप्लिकेशन API स्तर 12 या उससे कम लक्ष्य करता है, तो आपकी गतिविधि हमेशा इस कॉन्फ़िगरेशन परिवर्तन को स्वयं संभालती है (यह कॉन्फ़िगरेशन परिवर्तन आपकी गतिविधि को पुनरारंभ नहीं करता है, यहां तक ​​कि एंड्रॉइड 3.2 या उच्चतर डिवाइस पर चलने पर भी)। एपीआई स्तर 13 में जोड़ा गया।

तो, AndroidManifest.xml फ़ाइल में, हम डाल सकते हैं:

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 

1

जोड़ा जा रहा है <preference name="orientation" value="portrait" />के तहत <widget>में अपने config.xml मेरे लिए काम किया।

(अन्य समाधान या तो मेरे डिवाइस पर काम नहीं करते थे, भवन निर्माण के दौरान अधिलेखित हो गए थे या निर्माण प्रक्रिया के दौरान पदावनति त्रुटियां दी थीं।)


उक्त config.xml कहाँ है? आप किस विकास मंच का जिक्र कर रहे हैं?
ताश पेमहिवा

1

मैनिफ़ेस्ट फ़ाइल में जिस गतिविधि को आप "पोर्ट्रेट" में उपयोग करना चाहते हैं, आपको इन कोड को गतिविधि टैग में लिखना होगा

  android:screenOrientation="portrait" 

इस तरह

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

लेकिन अगर आप परिदृश्य में स्क्रीन चाहते हैं तो इस कोड का उपयोग करें

android:screenOrientation="landscape"

1
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //setting screen orientation locked so it will be acting as potrait
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}

0

अगर किसी को आश्चर्य हो रहा था, तो आप अपने पूरे आवेदन के लिए यह कैसे कर सकते हैं कि आपकी सभी गतिविधियाँ कोटलिन में एक सामान्य आधार वर्ग का विस्तार करें , नीचे दिए गए उदाहरण देखें:

class InteractiveStoryApplication: Application() {
override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
            activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }

        override fun onActivityPaused(activity: Activity?) {
        }

        override fun onActivityResumed(activity: Activity?) {
        }

        override fun onActivityDestroyed(activity: Activity?) {
        }

        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
        }

        override fun onActivityStarted(activity: Activity?) {
        }

        override fun onActivityStopped(activity: Activity?) {
        }
    })
}
}

और फिर आपको AndroidManifest में अपना सामान्य आधार वर्ग जोड़ना होगा:

<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"

0

आप इसे दो तरीकों से कर सकते हैं।

  1. जोड़ना android:screenOrientation="portrait"इसी गतिविधि में अपनी मैनिफ़ेस्ट फ़ाइल
  2. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); `OnCreate () विधि में अपनी गतिविधि में जोड़ें

0

ग्राहम बोरलैंड के जवाब के समान ... लेकिन ऐसा लगता है कि आपको आवेदन वर्ग नहीं बनाना है अगर आप नहीं चाहते हैं ... बस अपनी परियोजना में एक आधार गतिविधि बनाएं

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

और इस श्रेणी को AppCompatActivity के स्थान पर विस्तारित करें जहां आप Potrait Mode का उपयोग करना चाहते हैं

public class your_activity extends BaseActivity {}

0

Xamarin उपयोगकर्ताओं के लिए:

यदि आप अपनी सभी गतिविधियों को एक BaseActivityजस्ट ऐड में बढ़ाते हैं:

this.RequestedOrientation = ScreenOrientation.Portrait;

इससे समस्या का समाधान हो जाएगा। यदि आप चाहते हैं कि कोई विशेष गतिविधि परिदृश्य में हो तो इसमें ओवरराइड करें OnActivityCreated। जैसा:

this.Activity.RequestedOrientation = ScreenOrientation.Landscape;

-11

अपने मेनिफेस्ट में यह लिखें:

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>

6
यह कुछ भी नया नहीं जोड़ता है कि 3 साल पुराने उत्तर पहले ही कह चुके हैं। आप इसे हटाने पर विचार कर सकते हैं। यदि आप अधिक जानकारी शामिल करने के लिए अपने उत्तर को संपादित करने का निर्णय लेते हैं, जो आपके उत्तर को दूसरों से अलग करता है, तो कृपया मेरे लिए @reply।
आर्टजोम बी।

1
Android: screenOrientation = "पोर्ट्रेट" को एप्लिकेशन टैग में नहीं जोड़ा जा सकता है, इसे गतिविधि टैग के अंदर जाना होगा
होसैन अमिनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.