एक बटन का उपयोग करके स्क्रीन ओरिएंटेशन को प्रोग्रामेटिक रूप से बदलें


97

मुझे लगता है कि यह लागू करने योग्य है क्योंकि स्क्रीन रोटेशन व्यवहार अनुप्रयोग स्तर तक जा सकता है।


क्या आपने यह कोशिश की है? : stackoverflow.com/questions/14873755/…
सईद जलील हसन

जवाबों:


216

हाँ, यह लागू है!

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ActivityInfo

http://developer.android.com/reference/android/content/pm/ActivityInfo.html

लिंक देखें:

Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait);
Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape);

buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   }

});

buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
   }

});

http://android-er.blogspot.in/2011/08/set-screen-orientation-programmatically.html


धन्यवाद। लेकिन क्या यह फ़ंक्शन रूट किए गए डिवाइस पर चलाने की आवश्यकता है? यह मेरे सेल फोन पर नहीं बल्कि मेरे रूट किए गए टैबलेट पर काम कर रहा है।
सैम

नहीं, ऐसा नहीं है .. दरअसल मैंने पोस्ट करने से पहले उस लिंक में कोड का परीक्षण किया था .. यह मेरे डिवाइस में काम कर रहा था ..
हरिहरन

ठीक है, हाँ, आप सही हैं। मैं सिर्फ एक और डिवाइस का परीक्षण किया है और यह अच्छी तरह से काम करता है। ठीक है, मेरा सैमसंग गैलेक्सी नेक्सस काम नहीं करता है। पता नहीं क्यों।
सैम

4
जवाब के लिए धन्यवाद। लेकिन यह उस मोड में एप्लिकेशन को लॉक करता है। जब उपयोगकर्ता डिवाइस को घुमा रहा है तो स्क्रीन घूर्णन नहीं कर रही है।
Eco4ndly

2
यदि मैं इस उत्तर के रूप में प्रोग्राम के अनुसार परिदृश्य के लिए अभिविन्यास सेट करता हूं, तो उपयोगकर्ता डिवाइस को घुमाकर अभिविन्यास को बदलने में सक्षम नहीं है। इस समस्या को संभालने का कोई तरीका? मैं वह करना चाहता हूं जो इस उत्तर में सिखाया गया था लेकिन तब जब उपयोगकर्ता डिवाइस को घुमाएगा तो यह अभिविन्यास को बदलता रहेगा।
जल्द ही

36

हां, आप किसी भी समय आप जो भी उपयोग करना चाहते हैं, उसे प्रोग्राम ओरिएंटेशन सेट कर सकते हैं:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

परिदृश्य और चित्र मोड के लिए क्रमशः। SetRequestedOrientation () विधि गतिविधि वर्ग के लिए उपलब्ध है , इसलिए इसका उपयोग आपकी गतिविधि के अंदर किया जा सकता है।

और यह आप वर्तमान स्क्रीन अभिविन्यास प्राप्त कर सकते हैं और इसकी वर्तमान स्थिति के आधार पर इसे पर्याप्त रूप से सेट कर सकते हैं :

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
final int orientation = display.getOrientation(); 
 // OR: orientation = getRequestedOrientation(); // inside an Activity

// set the screen orientation on button click
Button btn = (Button) findViewById(R.id.yourbutton);
btn.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {

              switch(orientation) {
                   case Configuration.ORIENTATION_PORTRAIT:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                       break;
                   case Configuration.ORIENTATION_LANDSCAPE:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                       break;                   
               }
          }
   });

यहाँ से लिया गया: http://techblogon.com/android-screen-orientation-change-rotation-example/

संपादित करें

इसके अलावा, आप स्क्रीन ओरिएंटेशन प्राप्त कर सकते हैं Configuration:

Activity.getResources().getConfiguration().orientation

3
मैं getRequestedOrientation()वर्तमान स्क्रीन अभिविन्यास प्राप्त करने के लिए उपयोग करने का सुझाव देता हूं : stackoverflow.com/a/21909327/1037294
a.ch.

getRequestedOrientation()UNSPECIFIEDजब आप ऐप शुरू करते हैं तो आपको देता है । तो ऊपर श्रोता के साथ स्क्रीन परिवर्तन नहीं होगा और यदि आप जोड़ने UNSPECIFIEDके लिए switchयह में से एक में स्क्रीन रखना चाहिए पोर्ट्रेट / लैंडस्केप पहले की स्थिति।
मोर्टिलिस

22

जहाँ भी संभव हो, कृपया SCREEN_ORIENTATION_LANDSCAPE या SCREEN_ORIENTATION_PORTITIT का उपयोग न करें। इसके बजाय उपयोग करें:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

ये उपयोगकर्ता को डिवाइस को या तो लैंडस्केप ओरिएंटेशन या फिर पोर्ट्रेट ओरिएंटेशन के लिए क्रमशः ओरिएंट करने की अनुमति देते हैं। यदि आपको कभी भी चार्जिंग केबल के साथ एक गेम खेलना पड़ता है जो आपके पेट में चला जाता है, तो आप वास्तव में जानते हैं कि उपलब्ध दोनों झुकाव उपयोगकर्ता के लिए महत्वपूर्ण हैं।

नोट: फोन के लिए, कम से कम कई जो मैंने चेक किए हैं, यह केवल "राइट साइड अप" पोर्ट्रेट मोड की अनुमति देता है, हालांकि, SENSOR_PORTRAIT टेबलेट पर ठीक से काम करता है।

नोट: इस सुविधा को एपीआई स्तर 9 में पेश किया गया था, इसलिए यदि आपको 8 या उससे कम (इस बिंदु पर संभावना नहीं) का समर्थन करना चाहिए, तो इसके बजाय इसका उपयोग करें:

setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

19

स्क्रीन का ओरिएंटेशन सेट करने के लिए इसका उपयोग करें:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

या

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

और इसे अपने प्रकटन में जोड़ना न भूलें:

android:configChanges = "orientation"

2
आपको दोनों की आवश्यकता है "orientation|screenSize", यहां देखें: developer.android.com/guide/topics/resources/…
Benny

7

एक काम कोड:

private void changeScreenOrientation() {
    int orientation = yourActivityName.this.getResources().getConfiguration().orientation;
    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        showMediaDescription();
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        hideMediaDescription();
    }
    if (Settings.System.getInt(getContentResolver(),
            Settings.System.ACCELEROMETER_ROTATION, 0) == 1) {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
            }
        }, 4000);
    }
}

इस विधि को अपने बटन पर क्लिक करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.