在测试我正在开发的应用程序时,我注意到布局的一些奇怪的行为,仅适用于Android 5.1(经测试且适用于Android 5.0及更低版本)。
当从纵向移动到横向然后再回到纵向时,整个布局似乎向上移动,而徽标的ImageView
被切断。 (红色部分是我的徽标的ImageView
,我无法显示。)
这些屏幕截图来自7英寸平板电脑。这是我现在唯一可以运行Android 5.1的设备,因此我无法确认这是否是特定于设备的问题。
我需要能够支持不同的屏幕尺寸和方向,因此我可以在layout-large-land
文件夹中的layout-large-port
和res
文件夹中使用这些布局。
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
,问题就消失了,所以我现在最好的猜测就是问题出在哪里。
我为这个长期的问题道歉,因为我真的尝试自己解决这个问题无济于事。希望有人能提供帮助。提前谢谢。