RelativeLayout在ScrollView中扩展超出屏幕大小

3
我有一个布局,它是一个包含RelativeLayout的ScrollView,我添加了ScrollView因为在较小的设备上RelativeLayout会裁剪超出屏幕大小的部分,所以超过屏幕高度的任何内容都不可见。
我尝试将RelativeLayout的高度设置为wrap_content,但这并没有解决问题,于是我添加了ScrollView,现在整个布局都显示出来了,但对于像 Nexus 4 这样具有更大屏幕的设备,RelativeLayout会延伸到屏幕高度之上,因此用户必须滚动才能看到底部的TextViews。
无论如何,我知道问题出在这个ImageView上,它的drawable: src = @ drawable / background 强制相对布局占用了超出屏幕高度的空间。我使用centerCrop对图像进行处理,图片的高度是1200,Nexus 4的高度为1280,因此ImageView应该适合屏幕大小,但它拉伸了整个布局。黑线约标识了屏幕的结束位置,但相对布局继续向下扩展,而不是在那一点处裁剪ImageView。
我该如何确保我的RelativeLayout在具有更大分辨率的设备上不超过屏幕高度,但对于较小的设备,则包括不能适应屏幕高度的内容滚动?目前我必须在所有设备上滚动才能看到底部的TextViews...
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="@android:color/black"
    android:fillViewport="true" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/bg"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:paddingLeft="-20dp"
            android:scaleType="centerCrop"
            android:src="@drawable/background" />

        <ImageView
            android:id="@+id/trophystack"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:paddingTop="20dp"
            android:scaleType="center"
            android:src="@drawable/trophystack" />

        <LinearLayout
            android:id="@+id/llTrophyStackLogin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:orientation="vertical"
            android:paddingBottom="20dp"
            android:paddingTop="20dp" >

            <EditText
                android:id="@+id/email_address"
                android:layout_width="250dp"
                android:layout_height="70dp"
                android:layout_marginBottom="2dp"
                android:background="@android:color/white"
                android:drawableLeft="@drawable/usericon2"
                android:fontFamily="sans-serif"
                android:gravity="center"
                android:hint="user@email.com"
                android:inputType="textEmailAddress"
                android:minWidth="250dp"
                android:tag="login_email" />

            <EditText
                android:id="@+id/password"
                android:layout_width="250dp"
                android:layout_height="70dp"
                android:background="@android:color/white"
                android:drawableLeft="@drawable/lock"
                android:gravity="center"
                android:hint="********"
                android:inputType="textPassword"
                android:tag="login_password" />

            <Button
                android:id="@+id/doLogin"
                android:layout_width="250dp"
                android:layout_height="70dp"
                android:layout_marginTop="20dp"
                android:background="@drawable/buttontexture1"
                android:minWidth="200dp"
                android:onClick="goQueue"
                android:text="Sign In"
                android:textColor="@android:color/white" />
        </LinearLayout>

        <TextView
            android:id="@+id/forgot_password_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="20dp"
            android:layout_marginLeft="20dp"
            android:text="Forgot password?"
            android:textColor="#FFFFFF"
            android:textSize="16dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/sign_up_text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_marginBottom="20dp"
            android:layout_marginRight="20dp"
            android:clickable="true"
            android:text="Sign up"
            android:textColor="@android:color/white"
            android:textSize="19dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/sign_up_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="20dp"
            android:layout_marginRight="2dp"
            android:layout_toLeftOf="@id/sign_up_text2"
            android:clickable="true"
            android:text="New here?"
            android:textColor="@android:color/white"
            android:textSize="16dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@id/sign_up_text"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_below="@id/llTrophyStackLogin"
            android:background="#0000"
            android:minHeight="50dp"
            android:onClick="doSwipe"
            android:textColor="@android:color/white" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignRight="@id/forgot_password_text"
            android:layout_below="@id/llTrophyStackLogin"
            android:background="#0000"
            android:minHeight="50dp"
            android:onClick="doForgotPassword"
            android:textColor="@android:color/white" />
    </RelativeLayout>

</ScrollView>

1
请发布您布局的截图。 - GrIsHu
1个回答

1
移除这一行。
android:src="@drawable/background"

ImageView获取图像并将其设置为RelativeLayout的背景。
android:background="@drawable/background"

我尝试过那样做,但是图像的宽高比会失调,因为在这种情况下scaleType是fitXY。 - abdu
如果不必要的话,您需要删除那个 ImageView。 - Piyush
你可以在线性布局中添加ScrollView,然后为其设置背景。 - Piyush
是的,我想那是正确的做法,如果没有其他答案发布,我会再等一会儿然后接受你的答案。 - abdu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接