Один из наших представлений имеет 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
Понятно, что мы приобретаем размеры портрета, когда переключаемся на пейзаж и пейзажные размеры, когда переключаемся на портрет. Что-то мы делаем неправильно? Мы могли бы взломать и решить эту проблему, но я чувствую, что там простое решение, которое нам не хватает.