我有一個相當簡單的應用程序,它具有自定義Toolbar
和NavigationDrawer
。除了這些項目,我有一個GLSurfaceView
填充整個屏幕。在我的NavigationDrawer
中,我有一個可以選擇的案例列表,然後在GLSurfaceView
中獲取並渲染數據。在某些設備上的onPause之後,NavigationDrawer高度摺疊爲工具欄的高度
一切工作正常,除了一件事:當應用程序暫停,然後恢復,NavigationView
的高度崩潰爲Toolbar
的高度。 NavigationView
仍然可以在這個小高度滾動,當在這一點上選擇一個案例時,NavigationView
的高度會刷新並且一切都恢復正常。因此這也發生在裝置的旋轉上。
注意,如果NavigationView
是可見旋轉時/暫停的應用程序,這個問題不發生。
雖然這個問題並沒有發生在所有設備上。以下是我在測試列表:
問題出現在:
- 三星Galaxy S2標籤:安卓6.0.1
- 三星Galaxy S7邊緣:安卓6.0.1
- 的HTC One A9s :在Android 6.0
- 三星Galaxy Note 10.1的Android 5.11
問題不出現在:
- 索尼XPERIA XZ:安卓6.0.1
- 華爲Honor 7:安卓5.0.2
- 華爲的Nexus P6:安卓7.0
我已經嘗試了所有無效的在的意見,但沒有任何幫助,我不知道我在做什麼錯誤的地方。
其他說明:
compileSdkVersion = 25
targetSdkVersion = 25
- 支持庫版本:
25.2.0
- 編譯工具版本:
25.0.2
- 搖籃插件版本:
2.3.0
/過Android Studio 2.3
styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- This style is set in AndroidManifest.xml -->
<style name="DemoTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- To be able to use a custom Toolbar. -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="colorPrimary">@color/demo_color_main_brand</item>
<item name="colorPrimaryDark">@color/demo_color_extras_darkblue</item>
<item name="colorAccent">@color/demo_color_extras_lightgreen</item>
</style>
<style name="DemoActionBarStyle" parent="@style/Widget.AppCompat.ActionBar">
<item name="android:theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">@color/demo_color_main_brand</item>
<item name="android:minHeight">?attr/actionBarSize</item>
</style>
...
</resources>
activity_demo。XML
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
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:id="@+id/demo_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Wrap Toolbar in AppBarLayout to add shadow below the Toolbar. -->
<android.support.design.widget.AppBarLayout
android:id="@+id/demo_appbarlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<android.support.v7.widget.Toolbar
android:id="@+id/demo_toolbar"
style="@style/DemoActionBarStyle" />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/demo_appbarlayout" >
<android.support.design.widget.CoordinatorLayout
android:id="@+id/fv_coordinatorlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.DemoActivity" >
<com.my.company.demo.views.DemoGLSurfaceView
android:id="@+id/demo_glsurfaceview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible" />
</android.support.design.widget.CoordinatorLayout>
</FrameLayout>
</RelativeLayout>
<android.support.design.widget.NavigationView
android:id="@+id/demo_navigationview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/demo_navigationview_header"
app:menu="@menu/demo_navigationview_menu"
app:itemIconTint="@drawable/demo_colors_navigationview"
app:itemTextColor="@drawable/demo_colors_navigationview" />
</android.support.v4.widget.DrawerLayout>
onCreate
在DemoActivity:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
// Setup Toolbar.
Toolbar toolbar = (Toolbar) findViewById(R.id.demo_toolbar);
setSupportActionBar(toolbar);
// Setup NavigationView.
NavigationView navigationView = (NavigationView) findViewById(R.id.demo_navigationview);
navigationView.setNavigationItemSelectedListener(this);
// Setup DrawerLayout.
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.demo_drawer_layout);
ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(
this, drawerLayout, toolbar, R.string.app_name, R.string.app_name);
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
// Load demo cases.
mModuleConfiguration = new ModuleConfiguration(getString(R.string.module_config_url), this);
}
循環之前:
旋轉後:
感謝您的建議,但不幸的是,它並沒有幫助在'onPause()中添加。在「NavigationView」中選擇一個項目時,「DrawerLayout」總是關閉。當我這樣做時,我意識到如果在旋轉設備時顯示'NavigationView',它將按預期工作(不會崩潰)。如果關閉,則會發生問題。我在這個問題上添加了一個註釋。 –