1

我有一個相當簡單的應用程序,它具有自定義ToolbarNavigationDrawer。除了這些項目,我有一個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); 
} 

循環之前:

enter image description here

旋轉後:

enter image description here

回答

1

我發現了一個類似的問題,幫助醫生修復我的問題here。它的主要內容是落實在Activity額外DrawerLayout.DrawerListener

@Override 
public void onDrawerSlide(View drawerView, float slideOffset) 
{ 
    mDrawerLayout.bringChildToFront(drawerView); 
    mDrawerLayout.requestLayout(); 
} 

,確保抽屜繪製GLSurfaceView以上。

步驟來解決:

  1. Activity實施DrawerLayout.DrawerListener
  2. 同時添加ActionBarDrawerToggleActivity作爲DrawerLayout的收聽者。
  3. DrawerLayout.DrawerListener界面執行上述onDrawerSlide()方法(mDrawerLayout只是對DrawerLayout的本地引用)。
0

這是一個奇怪的錯誤,也許你應該調用DrawerLayoutclose功能在你這樣的活動方法:

@Override 
public void onPause() { 
    super.onPause(); 
    drawerLayout.closeDrawer(GravityCompat.START); 
} 

好運。

+0

感謝您的建議,但不幸的是,它並沒有幫助在'onPause()中添加。在「NavigationView」中選擇一個項目時,「DrawerLayout」總是關閉。當我這樣做時,我意識到如果在旋轉設備時顯示'NavigationView',它將按預期工作(不會崩潰)。如果關閉,則會發生問題。我在這個問題上添加了一個註釋。 –