我有一个活动,用户可以通过意图选择照片。预期的行为如下:
- 图像的大小可以填充父宽度(减去边距)。
- 这种尺寸永远不会增加图像,只需在需要时缩小。
- 纵横比应该总是准确的。
- 高度应与宽度完全一样,以保持正确的纵横比。
- 在纵向模式下,最大高度在滚动出现之前可以达到多少(只需填满屏幕)。
- 这意味着如果受高度限制,宽度可能不会完全拉伸到父宽度。
- 在横向模式下,最大高度无关紧要,因为允许滚动,宽度应该始终是父宽度。
这是我正在使用的纵向 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>
这是我正在使用的 Landscape XML 布局:
<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 不再具有正确的大小。如果我首先在横向模式下选择图像,旋转看起来很好。如果我首先选择纵向模式的图像,然后切换到横向模式,则图像现在显示为 1px x 1px。
有什么想法吗?