Одно из наших представлений имеет a ScrollView
как его корневое расположение. Когда устройство повернуто и onConfigurationChanged()
назван, мы хотели бы смочь добраться 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 мы ожидали видеть, что ширина ScrollView переходит в 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
Очевидно, мы получаем размеры портрета, когда мы переключаемся для озеленения, и альбомные размеры, когда мы переключаемся на портрет. Есть ли что-то, что мы делаем неправильно? Мы могли получить hacky и решить это, но я чувствую, что существует простое решение, которое мы пропускаем.
getWidth () возвращает ширину по мере размещения View, что означает, что вам нужно подождать, пока оно не отобразится на экране. onConfigurationChanged
вызывается перед перерисовкой представления для новой конфигурации, поэтому я не думаю, что вы сможете получить новую ширину позже.