ユーザーがインテントを介して写真を選択できるアクティビティがあります。予想される動作は次のとおりです。
- 画像は、親の幅(マージンを差し引いたもの)を満たすようにサイズ設定されます。
- このサイズ設定では、画像が大きくなることはなく、必要に応じて縮小するだけです。
- アスペクト比は常に正確である必要があります。
- 高さは、正しいアスペクト比を維持するために幅とまったく同じようにスケーリングする必要があります。
- ポートレートモードでは、最大の高さは、スクロールが表示される前に取得できる高さです(画面全体に表示されるだけです)。
- これは、高さによって制限されている場合、幅が親の幅に完全に伸びない可能性があることを意味します。
- 横向きモードでは、スクロールが許可されているため、最大の高さは関係ありません。幅は常に親の幅である必要があります。
これが私が使用しているポートレートXMLレイアウトです:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/gray_background"
android:weightSum="1" >
<!-- Other controls here -->
<ImageView android:id="@+id/imgView"
android:layout_gravity="center"
android:layout_margin="5dip"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:contentDescription="@string/ImageToSend"
android:adjustViewBounds="true"
android:layout_weight="1"
android:scaleType="fitCenter" />
<!-- Other controls here -->
</LinearLayout>
これが私が使用しているLandscapeXMLレイアウトです。
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<!-- Other controls are here -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/gray_background" >
<ImageView android:id="@+id/imgView"
android:layout_gravity="center"
android:layout_margin="5dip"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:contentDescription="@string/ImageToSend"
android:adjustViewBounds="true"
android:layout_weight="1"
android:scaleType="fitCenter" />
<!-- Other controls are here -->
</LinearLayout>
</ScrollView>
これは、どのビューを表示していても完全に正常に機能します。私が抱えている問題は、ユーザーがデバイスを回転させると、ImageViewのサイズが正しくなくなることです。横向きモードで画像を選択することから始めると、回転はうまく見えます。ポートレートモードで画像を選択してからランドスケープモードに切り替えると、画像は1pxx1pxとして表示されます。
誰かアイデアはありますか?