Android 5.1的奇怪布局行为

时间:2016-11-21 00:53:04

标签: android android-layout

在测试我正在开发的应用程序时,我注意到布局的一些奇怪的行为,仅适用于Android 5.1(经测试且适用于Android 5.0及更低版本)。

当从纵向移动到横向然后再回到纵向时,整个布局似乎向上移动,而徽标的ImageView被切断。 (红色部分是我的徽标的ImageView,我无法显示。)

enter image description here

这些屏幕截图来自7英寸平板电脑。这是我现在唯一可以运行Android 5.1的设备,因此我无法确认这是否是特定于设备的问题。

我需要能够支持不同的屏幕尺寸和方向,因此我可以在layout-large-land文件夹中的layout-large-portres文件夹中使用这些布局。

来自layout-large-port

activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background"
    tools:context=".LoginActivity" >

    <ImageView
        android:id="@+id/loginImageView"
        android:layout_width="450dp"
        android:layout_height="200dp"
        android:scaleType="fitXY"
        android:src="@drawable/banner"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dp"/>

    <com.example.LoginEditText
        android:id="@+id/loginEditText"
        android:layout_width="400dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:hint="@string/input"
        android:lines="1"
        android:maxLines="1"
        android:layout_below="@id/loginImageView"
        android:inputType="number"
        android:digits="0123456789"
        android:textSize="50sp"
        android:layout_marginTop="40dp"
        android:gravity="center"/>

    <Button
        android:id="@+id/loginButton"
        android:layout_width="400dp"
        android:layout_height="wrap_content"
        android:background="@drawable/login_button"
        android:textColor="@color/white"
        android:text="@string/login"
        android:textAllCaps="true"
        android:textSize="30sp"
        android:layout_marginTop="80dp"
        android:layout_below="@id/loginEditText"
        android:layout_centerHorizontal="true"
        android:paddingTop="10dp"
        android:paddingBottom="10dp" />

</RelativeLayout>
来自layout-large-land

activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".LoginActivity">

    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <ImageView
            android:id="@+id/loginImageView"
            android:layout_width="400dp"
            android:layout_height="200dp"
            android:layout_marginTop="40dp"
            android:scaleType="fitXY"
            android:src="@drawable/banner"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"/>

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <com.example.LoginEditText
            android:id="@+id/loginEditText"
            android:layout_width="350dp"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="50dp"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:textSize="40sp"
            android:hint="@string/input"
            android:lines="1"
            android:maxLines="1"
            android:layout_alignParentTop="true"
            android:inputType="number"
            android:digits="0123456789"
            android:gravity="center"/>

        <Button
            android:id="@+id/loginButton"
            android:layout_width="350dp"
            android:layout_height="wrap_content"
            android:background="@drawable/login_button"
            android:textColor="@color/white"
            android:text="@string/login"
            android:textAllCaps="true"
            android:textSize="30sp"
            android:layout_marginTop="30dp"
            android:layout_below="@id/loginEditText"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"/>

    </RelativeLayout>

</LinearLayout>

我使用了自定义EditText因为我需要能够随时显示键盘。我不认为这会导致问题,因为我尝试使用普通EditText并且问题仍然存在。在这里。

LoginEditText.java

public class LoginEditText extends EditText {

    public LoginEditText(Context context) {

        super(context);

    }

    public LoginEditText(Context context, AttributeSet attributeSet) {

        super(context, attributeSet);

    }

    public LoginEditText(Context context, AttributeSet attributeSet, int defaultStyleAttribute) {

        super(context, attributeSet, defaultStyleAttribute);

    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public LoginEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {

        super(context, attrs, defStyleAttr, defStyleRes);

    }

    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_BACK) {

            return true;

        }

        return false;

    }

}

我在LoginActivity的manifest活动标签中也有这些选项。

android:windowSoftInputMode="stateAlwaysVisible|adjustPan"

从第3个屏幕截图中,如果我按主页按钮然后返回应用程序,则会显示正确的纵向布局。它似乎只有在我从lanscape变为肖像时才会出现。

我尝试将EditText替换为其他视图,例如ImageView,问题就消失了,所以我现在最好的猜测就是问题出在哪里。

我为这个长期的问题道歉,因为我真的尝试自己解决这个问题无济于事。希望有人能提供帮助。提前谢谢。

0 个答案:

没有答案