Android布局在使用相对和线性布局从纵向切换到横向时会产生问题

时间:2016-10-03 10:10:55

标签: android android-layout

我尝试使用徽标两个编辑文本和登录按钮创建用于登录页面的UI,在手机纵向模式下情况非常好但是当我在横向和平板电脑中检查时,问题就开始了。

我有两个解决方案

1。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativelayoutparent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fed2db"
    android:orientation="vertical"
    >
        <RelativeLayout
            android:id="@+id/linearlayout_parents"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <RelativeLayout
                android:id="@+id/relativelayoutbasic"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/margin20"
                android:layout_marginRight="@dimen/margin20"
                android:layout_centerInParent="true"
                >
                <EditText
                    android:id="@+id/userName"
                    android:inputType="text"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="demo@rohitpro.com"
                    android:hint="UserName"
                    android:drawableStart="@mipmap/ic_launcher"
                    android:drawablePadding="10dp"
                    android:background="@null"
                    android:layout_marginTop="10dp" />
                <View
                    android:id="@+id/view"
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:background="#f7f7f7"
                    android:layout_below="@id/userName"
                    android:layout_marginTop="10dp" />
                <EditText
                    android:id="@+id/password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/view"
                    android:inputType="textPassword"
                    android:hint="Password"
                    android:text="Password@123"
                    android:drawablePadding="10dp"
                    android:background="@null"
                    android:drawableStart="@mipmap/ic_launcher"
                    android:layout_marginTop="10dp" />
                <Button
                    android:id="@+id/buttonLogin"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/password"
                    android:background="#f7f7f7"
                    android:text="Login"
                    android:textColor="@android:color/black"
                    android:textAllCaps="false"
                    android:textStyle="bold"
                    android:textSize="17sp"
                    android:layout_marginTop="10dp" />
                <Button
                    android:id="@+id/buttonForgotPassword"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/buttonLogin"
                    android:layout_marginTop="10dp"
                    android:text="Forgot Password ?"
                    android:textColor="@android:color/white"
                    android:textAllCaps="false"
                    android:background="@null" />
            </RelativeLayout>

            <ImageView
                android:id="@+id/imageview"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/ic_launcher"
                android:layout_marginTop="@dimen/margin20"
                android:layout_above="@id/relativelayoutbasic"
                android:layout_centerHorizontal="true"/>
        </RelativeLayout>
</RelativeLayout>

这在纵向模式下效果很好,但是当我们在横向旋转时,它会缩小图像尺寸。

以纵向显示以下示例 enter image description here

在横向enter image description here

中显示以下示例

所以我尝试了下一个解决方案

2

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativelayoutparent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#3996db"
    android:orientation="vertical"
    >

    <ScrollView
        android:id="@+id/linearlayout_parentscroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:id="@+id/linearlayout_parents"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/imageview"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/ic_launcher"
                android:layout_marginTop="@dimen/margin20"
                android:layout_gravity="center_horizontal"/>

            <RelativeLayout
                android:id="@+id/relativelayoutbasic"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/margin20"
                android:layout_marginRight="@dimen/margin20"

                >
                <EditText
                    android:id="@+id/userName"
                    android:inputType="text"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="demo@rohitpro.com"
                    android:hint="UserName"
                    android:drawableStart="@mipmap/ic_launcher"
                    android:drawablePadding="10dp"
                    android:background="@null"
                    android:layout_marginTop="10dp" />
                <View
                    android:id="@+id/view"
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:background="#f7f7f7"
                    android:layout_below="@id/userName"
                    android:layout_marginTop="10dp" />
                <EditText
                    android:id="@+id/password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/view"
                    android:inputType="textPassword"
                    android:hint="Password"
                    android:text="Password@123"
                    android:drawablePadding="10dp"
                    android:background="@null"
                    android:drawableStart="@mipmap/ic_launcher"
                    android:layout_marginTop="10dp" />
                <Button
                    android:id="@+id/buttonLogin"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/password"
                    android:background="#f7f7f7"
                    android:text="Login"
                    android:textColor="@android:color/black"
                    android:textAllCaps="false"
                    android:textStyle="bold"
                    android:textSize="17sp"
                    android:layout_marginTop="10dp" />
                <Button
                    android:id="@+id/buttonForgotPassword"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/buttonLogin"
                    android:layout_marginTop="10dp"
                    android:text="Forgot Password ?"
                    android:textColor="@android:color/white"
                    android:textAllCaps="false"
                    android:background="@null" />
            </RelativeLayout>
        </LinearLayout>
    </ScrollView>

</RelativeLayout>

A。在此解决方案中,我们无法使用属性android:layout_centerInParent =&#34; true&#34; 因为它是相对布局所以我们无法像在解决方案一中那样使登录文本字段居中,这个解决方案在较小的屏幕中看起来很好并且也有滚动但不能在大屏幕上工作,因为它不会出现在中心。

B。我们无法在scrollview中使用相对布局,因为它会造成许多其他复杂情况。

我花了这么多时间,使用了很多堆栈溢出引用,但也没有其他工作。

请提出一些方法来处理它。 提前谢谢......

3 个答案:

答案 0 :(得分:1)

此处的问题是您使用宽度/高度为@mipmap/ic_launcher的{​​{1}}图片 因此,"wrap_content"尺寸将基于ImageView图片尺寸
并且ic_launcher图像大小在空间中比纵向小 =&GT;你的横向ic_launcher小于肖像

因此,只需设置ImageView的宽度,然后您的图像尺寸在纵向和横向中都会相同

ImageView

答案 1 :(得分:1)

在横向模式下打开应用程序时,Android首先检查是否存在特定于横向的任何布局,如果是,则加载它而不是 layouts 文件夹中指定的布局。为此,您需要创建一个新文件夹 res / layout-land ,然后从 布局复制布局此文件夹中的文件夹,然后进行编辑并制作精美的横向布局。

答案 2 :(得分:0)

您可以为平板电脑创建指定的l ayout-land 甚至 layout-sw600dp-land