ビューの1つには、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"
>
私たちのドロイドでは、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
明らかに、横向きに切り替えると縦向きの寸法になり、縦向きに切り替えると横向きの寸法になります。私たちが間違っていることはありますか?私たちはハッキーになってこれを解決することができましたが、私たちが欠けている単純な解決策があるように感じます。