2013-08-19 4 views
5

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

+1

के संभावित डुप्लिकेट [ Android में लेआउट में अभिविन्यास परिवर्तन का पता कैसे लगाएं?] (Http://stackoverflow.com/questions/5726657/how-to-detect-orientation-change-in-layout-in -android) – Sam

उत्तर

23

यह वास्तव में कोई नया दृश्य पैदा करेगा और onCreate फिर से बुलाया जाएगा बदलने आधिकारिक दस्तावेज http://developer.android.com/guide/topics/resources/runtime-changes.html

देखें।

इसके अलावा आप इसे माध्यम से

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

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

लिंक के लिए बहुत बहुत धन्यवाद महान जवाब के लिए बहुत बहुत धन्यवाद! –

+4

@noone: ध्यान दें कि इस विधि को केवल तभी कॉल किया जाएगा यदि आपने कॉन्फ़िगरेशन चुने हैं जिन्हें आप एंड्रॉइड.R.attr # configChanges को अपने मैनिफेस्ट में विशेषता के साथ संभालना चाहते हैं। जावडोक देखें! – user504342

+0

धन्यवाद आदमी, यह मेरे लिए भी काम करता है। – Suniel

2

आमतौर पर अभिविन्यास परिवर्तन OnCreate() पर कॉल करता है जब तक कि आप इसे अन्यथा करने के लिए कुछ नहीं करते हैं।

आप वहां तर्क डाल सकते हैं।

+0

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

+1

@Poplitou 'onSavedInstanceState' के बारे में siik के उत्तर को देखते हैं और http://stackoverflow.com/questions/4096169/onsaveinstancestate-and-onrestoreinstancestate – sealz

+0

लिंक –

3

जांच कर सकते हैं आप अपने onCreate विधि से onSavedInstanceState जांच कर सकते हैं, अगर यह अशक्त साधन इस विन्यास परिवर्तन है नहीं है।

+0

ठीक है, मैं देखता हूं कि यह कैसे जानना है, महान जवाब के लिए धन्यवाद! –

3

एक और दृष्टिकोण OrientationEventListener का उपयोग कर रहा है।

यह इस तरह इस्तेमाल किया जा सकता:

OrientationEventListener mOrientationEventListener = new OrientationEventListener(
      this, SensorManager.SENSOR_DELAY_NORMAL) { 

     @Override 
     public void onOrientationChanged(int orientation) { 
      //checking if device was rotated 
      if (orientationPortrait != isPortrait(orientation)) { 
       orientationPortrait = !orientationPortrait; 
       Log.d(TAG, "Device was rotated!"); 
      } 
     } 
    }; 

उन्मुखीकरण जांचने के लिए:

private boolean isPortrait(int orientation) { 
    return (orientation >= (360 - 90) && orientation <= 360) || (orientation >= 0 && orientation <= 90); 
} 

और सक्षम और अक्षम श्रोता के लिए मत भूलना:

if (mOrientationEventListener != null) { 
     mOrientationEventListener.enable(); 
    } 

if (mOrientationEventListener != null) { 
     mOrientationEventListener.disable(); 
    } 
+0

मुझे लगता है कि कॉन्फ़िगरेशन परिवर्तन एक बात है, इस मामले में कॉन्फ़िगरेशन चेंजड जाने का तरीका है। लेकिन अगर आपने अभिविन्यास परिवर्तन को बंद कर दिया है और अभी भी अधिसूचित होना चाहते हैं, तो ओरिएंटेशन श्रोताओं का सबसे अच्छा तरीका है। धन्यवाद Bogdan। – Murciegalo84

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