更改屏幕方向时添加了额外 Space
Extra Space added when changing screen orientation
我的应用程序在运行时向主 activity 添加带有值的片段,但我需要能够在不丢失这些值的情况下更改屏幕方向。主要问题是我在清单作品中添加了 android:configChanges="orientation|screenSize"
,但是应用程序的顶部添加了大量额外的 space,因此在第一次更改后的任一方向上,大约四分之一屏幕无法访问 白色 space.
activity_main.xml
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:fitsSystemWindows="true"
android:theme="@style/MyAppTheme">
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
</android.support.design.widget.CoordinatorLayout>
content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="25dp"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="60dp"
android:layout_marginTop="8dp">
<TextView
android:id="@+id/manu_label"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:text="Manufacturer:"
android:textSize="12sp"
android:gravity="center"
android:layout_marginBottom="4dp"
android:layout_marginLeft="8dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"/>
<Spinner
android:id="@+id/manu_spinner"
android:theme="@style/SpinnerStyle"
android:layout_width="80dp"
android:layout_height="20dp"
android:dropDownWidth="150dp"
android:layout_marginLeft="8dp"
android:background="@drawable/cell_background"
android:layout_toRightOf="@id/manu_label"
android:layout_alignParentTop="true">
</Spinner>
<LinearLayout
android:id="@+id/panels_container"
android:orientation="vertical"
android:layout_below="@id/manu_spinner"
android:layout_alignParentLeft="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
我的 java 代码除了将片段添加到线性布局外不操作视图:
private View.OnClickListener cableListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction ft = manager.beginTransaction();
PanelsFragment frag = PanelsFragment.newInstance();
cables.add(frag);
ft.add(R.id.panels_container, frag, Integer.toString(trans.indexOf(frag)));
ft.commit();
}
};
有没有办法防止我的应用栏和滚动视图之间出现额外的 space,或者我是否需要不同的策略?我确实尝试过覆盖 onSaveInstanceState 和 onRestoreInstanceState,但据推测我的方法需要比我的最小值 14 更高的 API。任何建议将不胜感激。
编辑:由于项目的性质,我无法提供问题的图片。当应用程序首次启动时,标签和具有 "manu" id 的微调器与应用程序栏之间几乎没有 space。但是,当屏幕从纵向变为横向时,应用栏与标签和微调器之间至少有 60dp 的不可访问 space。我注意到内容视图需要 25dp 的上边距,否则它的内容会在应用栏后面开始。
通过在 activity_main.xml 中指定内容视图的高度、宽度和边距,我的问题出乎意料地得到了解决:
<include
layout="@layout/content_main"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_marginTop="0dp" />
我的应用程序在运行时向主 activity 添加带有值的片段,但我需要能够在不丢失这些值的情况下更改屏幕方向。主要问题是我在清单作品中添加了 android:configChanges="orientation|screenSize"
,但是应用程序的顶部添加了大量额外的 space,因此在第一次更改后的任一方向上,大约四分之一屏幕无法访问 白色 space.
activity_main.xml
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:fitsSystemWindows="true"
android:theme="@style/MyAppTheme">
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
</android.support.design.widget.CoordinatorLayout>
content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="25dp"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="60dp"
android:layout_marginTop="8dp">
<TextView
android:id="@+id/manu_label"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:text="Manufacturer:"
android:textSize="12sp"
android:gravity="center"
android:layout_marginBottom="4dp"
android:layout_marginLeft="8dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"/>
<Spinner
android:id="@+id/manu_spinner"
android:theme="@style/SpinnerStyle"
android:layout_width="80dp"
android:layout_height="20dp"
android:dropDownWidth="150dp"
android:layout_marginLeft="8dp"
android:background="@drawable/cell_background"
android:layout_toRightOf="@id/manu_label"
android:layout_alignParentTop="true">
</Spinner>
<LinearLayout
android:id="@+id/panels_container"
android:orientation="vertical"
android:layout_below="@id/manu_spinner"
android:layout_alignParentLeft="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
我的 java 代码除了将片段添加到线性布局外不操作视图:
private View.OnClickListener cableListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction ft = manager.beginTransaction();
PanelsFragment frag = PanelsFragment.newInstance();
cables.add(frag);
ft.add(R.id.panels_container, frag, Integer.toString(trans.indexOf(frag)));
ft.commit();
}
};
有没有办法防止我的应用栏和滚动视图之间出现额外的 space,或者我是否需要不同的策略?我确实尝试过覆盖 onSaveInstanceState 和 onRestoreInstanceState,但据推测我的方法需要比我的最小值 14 更高的 API。任何建议将不胜感激。
编辑:由于项目的性质,我无法提供问题的图片。当应用程序首次启动时,标签和具有 "manu" id 的微调器与应用程序栏之间几乎没有 space。但是,当屏幕从纵向变为横向时,应用栏与标签和微调器之间至少有 60dp 的不可访问 space。我注意到内容视图需要 25dp 的上边距,否则它的内容会在应用栏后面开始。
通过在 activity_main.xml 中指定内容视图的高度、宽度和边距,我的问题出乎意料地得到了解决:
<include
layout="@layout/content_main"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_marginTop="0dp" />