我的屏幕包含一些TextViews和一个垂直方向的LinearLayout内的ImageView。我希望整个事情完全适合屏幕(无论它的大小),ImageView是调整自身以适应这种情况的。
我在这里看到了这个问题的一些变体(包括this),但没有找到真正满足我要求的任何内容。
到目前为止,我已经使用了一个不是很漂亮的解决方案,它将整个LinearLayout放在ScrollView中,并在其 onMeasure上使用自定义ImageView 方法计算ScrollView的高度与屏幕高度之间的差值。如果前者大于后者,则从ImageView的测量高度中减去delta。
这个解决方案并不完美,我真的很想知道是否有更好的解决方案。我确定有。
感谢您的帮助。
编辑:这是布局xml
<com.xxx.widgets.LockableScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res/com.venews"
android:layout_width="match_parent"
android:layout_height="match_parent"
custom:scrollable="false"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/login_horizontal_margin"
android:paddingRight="@dimen/login_horizontal_margin"
android:orientation="vertical">
<com.xxx.widgets.ResizableToFitScreenImageView android:id="@+id/login_logo_image"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/login_logo_margin"
android:layout_marginBottom="@dimen/login_logo_margin"
android:src="@drawable/ic_logo_and_name"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/login_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"/>
<TextView android:id="@+id/login_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/login_username"/>
(...Other stuff...)
</RelativeLayout>
</LinearLayout>
</com.xxx.widgets.LockableScrollView>
EDIT2 :这是一个草图,希望能让事情变得更清晰。
草图显示了2种不同的屏幕尺寸,因此该解决方案还需要支持不同屏幕尺寸的不同设备。
答案 0 :(得分:1)
在ImageView上,设置android:layout_height="0dp"
和android:layout_weight="1"
。这将使其填充剩余空间(更多关于layout_weight here)。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>