मुझे वर्तमान स्क्रीन अभिविन्यास कैसे मिल सकता है?


190

मैं बस कुछ झंडे सेट करना चाहता हूं जब मेरा अभिविन्यास परिदृश्य में है ताकि जब गतिविधि onCreate () में फिर से बनाई जाए तो मैं पोर्ट्रेट बनाम परिदृश्य में लोड करने के बीच में टॉगल कर सकता हूं। मेरे पास पहले से ही एक लेआउट-भूमि xml है जो मेरे लेआउट को संभाल रही है।

public void onConfigurationChanged(Configuration _newConfig) {

        if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            this.loadURLData = false;
        }

        if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            this.loadURLData = true;
        }

        super.onConfigurationChanged(_newConfig);
    }

ओवर-राइडिंग ऑनकोनफिगरेशनचेंज मेरे लेआउट-लैंड एक्सएमएल को लैंडस्केप ओरिएंटेशन में लोड होने से रोकेगा।

मैं अभी onCreate () में अपने डिवाइस का वर्तमान अभिविन्यास प्राप्त करना चाहता हूं। मुझे यह कैसे मिल सकता है?

जवाबों:


474
Activity.getResources().getConfiguration().orientation

8
यह केवल दो मान प्रदान करता है ORIENTATION_PORTRAIT और ORIENTATION_LANDSCAPE। क्या एक्टिविटीइन्फो से सभी चार मूल्यों को प्राप्त करने का एक तरीका है? (वह है LANDSCAPE_REVERSE और PORTRAIT_REVERSE साथ ही)
HRJ

18
@HRJ आप getWindowManager () का उपयोग कर सकते हैं। getDefaultDisplay ()। GetRotation ()
MKJParekh

24
getWindowManager ()। getDefaultDisplay ()। getRotation () डिस्प्ले के "नेचुरल" ओरिएंटेशन के संदर्भ में रोटेशन लौटाता है, यानी टैबलेट के लिए यह लैंडस्केप मोड में Surface.ROTATION_0 लौटाएगा, जबकि मोबाइल फोन के लिए यह समान मान लौटाएगा। चित्र।
ज़ोल्टन

64
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // code for portrait mode
} else {
    // code for landscape mode
}

जब का सुपरक्लास thisहैContext


28

कुछ उपकरणों में void onConfigurationChanged()दुर्घटना हो सकती है। उपयोगकर्ता वर्तमान स्क्रीन अभिविन्यास प्राप्त करने के लिए इस कोड का उपयोग करेगा।

public int getScreenOrientation()
{
    Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
    int orientation = Configuration.ORIENTATION_UNDEFINED;
    if(getOrient.getWidth()==getOrient.getHeight()){
        orientation = Configuration.ORIENTATION_SQUARE;
    } else{ 
        if(getOrient.getWidth() < getOrient.getHeight()){
            orientation = Configuration.ORIENTATION_PORTRAIT;
        }else { 
             orientation = Configuration.ORIENTATION_LANDSCAPE;
        }
    }
    return orientation;
}

और उपयोग करें

if (orientation==1)        // 1 for Configuration.ORIENTATION_PORTRAIT
{                          // 2 for Configuration.ORIENTATION_LANDSCAPE
   //your code             // 0 for Configuration.ORIENTATION_SQUARE
}

1
कृपया ध्यान दें कि getOrient.getWidth () और getOrient.getHeight () अभी हटाए गए हैं।
वल्लरीबोडक

सही उत्तर के रूप में चिह्नित किया जाना चाहिए जिस तरह से अधिक विस्तृत है
Zapnologica

1
सही उत्तर के रूप में चिह्नित किया जाना चाहिए और सभी परिस्थितियों में सबसे अच्छा काम करता है। लेकिन कृपया ध्यान दें कि aivaler ने getActivity ()। GetWindowManager ()। GetDefaultDisplay ()। GetWidth () और getHeight () को अब हटा दिया गया है। कृपया getSize (Point outsize) का उपयोग करें। इसे नए बिंदु ऑब्जेक्ट पास करने के रूप में उपयोग किया जा सकता है और इसे इसके x और y सदस्य मिलेंगे।
महेंद्र छिम्वाल

जैसे बिंदु outSize = new point (); getOrient.getSize (outSize); यदि (outSize.x == outSize.y) रिटर्न एक्जेक;
महेंद्र छिम्वाल

सोचा था कि मैं बताऊंगा, कि configuration.ORIENTATION_SQUARE को पदावनत कर दिया गया है और जबकि इसे 2013 में 0 के रूप में परिभाषित किया गया हो सकता है, इसे 3 के रूप में परिभाषित किया गया है, जबकि कॉन्फ़िगरेशन .ORIENTIATION_UNDEFINED को 0. चीयर्स के रूप में परिभाषित किया गया है।
डेव

26
int rotation =  getWindowManager().getDefaultDisplay().getRotation();

यह सामान्य और रिवर्स की तरह सभी अभिविन्यास देता है

और इसे संभालना

int angle = 0;
switch (rotation) {
    case Surface.ROTATION_90:
        angle = -90;
        break;
    case Surface.ROTATION_180:
        angle = 180;
        break;
    case Surface.ROTATION_270:
        angle = 90;
        break;
    default:
        angle = 0;
        break;
}

final int angle = (rotation == Surface.ROTATION_90) ? 90 : (rotation == Surface.ROTATION_180) ? 180 : (rotation == Surface.ROTATION_270) ? 270 : 0;
एंड्री सिरोकोमस्की


4

मामले में कोई भी सार्थक अभिविन्यास विवरण प्राप्त करना चाहता है (जैसे कि onConfigurationChanged(..)उन लोगों के पास reverseLandscape, sensorLandscapeऔर इसी तरह से), बस उपयोग करेंgetRequestedOrientation()


1

आपकी गतिविधि कक्षा में नीचे दी गई विधि का उपयोग करें:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            setlogo();// Your Method
            Log.d("Daiya", "ORIENTATION_LANDSCAPE");

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

            setlogoForLandScape();// Your Method
            Log.d("Daiya", "ORIENTATION_PORTRAIT");
        }
    }

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

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

बस इतना ही!!


0

यदि आप उस onConfigurationChanged मेथड को ओवरराइड करना चाहते हैं और फिर भी चाहते हैं कि वह बेसिक सामान कर दे तो overriden मेथड में पहले स्टेटमेंट के रूप में super.onConfigyrationChanged () का उपयोग करने पर विचार करें।


0

मैं सिर्फ एक और विकल्प का प्रस्ताव करना चाहता हूं जो आप में से कुछ को चिंतित करेगा:

android:configChanges="orientation|keyboardHidden" 

तात्पर्य यह है कि हम स्पष्ट रूप से लेआउट को इंजेक्ट करने की घोषणा करते हैं।

मामले में हम स्वचालित इंजेक्शन को लेआउट-लैंड और लेआउट फ़ोल्डरों के लिए धन्यवाद देना चाहते हैं। आपको बस इसे ऑनक्रिएट में जोड़ना है:

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();

    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getSupportActionBar().show();
    }

यहां, हम फोन के उन्मुखीकरण के आधार पर एक्शनबार प्रदर्शित करते हैं या नहीं

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