हमारे विचारों में से एक को इसके रूट लेआउट के रूप में ScrollView
है। जब डिवाइस घुमाया जाता है और कहा जाता है, तो हम ScrollView
की नई चौड़ाई/ऊंचाई प्राप्त करने में सक्षम होना चाहते हैं। हमारे कोड इस तरह दिखता है:कॉन्फ़िगरेशन में रूट लेआउट की नई चौड़ाई/ऊंचाई कैसे प्राप्त करें?
@Override
public void onConfigurationChanged(Configuration newConfig) {
Log.d(TAG, "Width: '" + findViewById(R.id.scrollview).getWidth() + "'");
Log.d(TAG, "Height: '" + findViewById(R.id.scrollview).getHeight() + "'");
super.onConfigurationChanged(newConfig);
Log.d(TAG, "Width: '" + findViewById(R.id.scrollview).getWidth() + "'");
Log.d(TAG, "Height: '" + findViewById(R.id.scrollview).getHeight() + "'");
}
हमारे AndroidManifest.xml के प्रासंगिक अनुभाग इस तरह दिखता है:
<activity android:name=".SomeActivity"
android:configChanges="keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
और अंत में, हमारे लेआउट के संबंधित भाग इस तरह दिखता है:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollview"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
>
<LinearLayout android:id="@+id/container"
android:orientation="vertical"
android:layout_height="fill_parent"
android:minHeight="200dip"
android:layout_width="fill_parent"
>
हमारे Droid पर, हमें लगता है कि स्क्रॉलव्यू की चौड़ाई 854 पर लैंडस्केप में स्विच होने पर और 480 पर जब पोर्ट्रेट पर वापस स्विच की जाती है (और ऊंचाई बराबर स्विच करता है, मेनू बार को घटाता है) । हालांकि, हम विपरीत देख रहे हैं। यहाँ हमारे LogCat है:
// Switching to landscape:
03-26 11:26:16.490: DEBUG/ourtag(17245): Width: '480' // Before super
03-26 11:26:16.490: DEBUG/ourtag(17245): Height: '778' // Before super
03-26 11:26:16.529: DEBUG/ourtag(17245): Width: '480' // After super
03-26 11:26:16.536: DEBUG/ourtag(17245): Height: '778' // After super
// Switching to portrait:
03-26 11:26:28.724: DEBUG/ourtag(17245): Width: '854' // Before super
03-26 11:26:28.740: DEBUG/ourtag(17245): Height: '404' // Before super
03-26 11:26:28.740: DEBUG/ourtag(17245): Width: '854' // After super
03-26 11:26:28.740: DEBUG/ourtag(17245): Height: '404' // After super
जाहिर है, हम चित्र आयाम हो रही है जब हम परिदृश्य के लिए स्विच, और परिदृश्य आयाम जब हम चित्र पर स्विच करें। क्या कुछ ऐसा है जो हम गलत कर रहे हैं? हम हैकी प्राप्त कर सकते हैं और इसे हल कर सकते हैं, लेकिन मुझे लगता है कि एक आसान समाधान है जिसे हम याद कर रहे हैं।
है यही कारण है कि हम से डरते थे। पहला समाधान जिसे हम सोच सकते हैं, थ्रेड को फेंकना, 100 एमएमएस या कुछ इंतजार करना है, और फिर चौड़ाई/ऊंचाई पकड़ना है। क्या कुछ कम हैकी हम उससे भी कर सकते हैं? – jakeboxer
धागा फैलाना? अरे नहीं यह मत करो! आप बस हैंडलर में एक रननेबल पोस्ट कर सकते हैं (या उदाहरण के लिए View.post() का उपयोग करके यूआई थ्रेड पर पोस्ट कर सकते हैं।) आप ViewTreeObserver के साथ श्रोता भी पंजीकृत कर सकते हैं, एक कस्टम व्यू इत्यादि में आकार बदलने की घटना का इंतजार कर सकते हैं। –
सुनना ViewTreeObserver को मेरे लिए सबसे अच्छा समाधान लगता है क्योंकि मुझे प्रतीक्षा विधि थोड़ा हैकी मिलती है। – jqpubliq