gpt4 book ai didi

android - 在某些设备上 onPause 后,NavigationDrawer 高度会折叠到工具栏的高度

转载 作者:行者123 更新时间:2023-11-30 00:40:15 25 4
gpt4 key购买 nike

我有一个相当简单的应用程序,它有一个带有 NavigationDrawer 的自定义 Toolbar。除了这些项目之外,我还有一个填满整个屏幕的 GLSurfaceView。在我的 NavigationDrawer 中,我有一个可以选择的案例列表,然后在 GLSurfaceView 中获取和呈现数据。

一切正常,除了一件事:当应用程序暂停然后恢复时,NavigationView 的高度折叠到 Toolbar 的高度。 NavigationView 仍然可以在那个小高度滚动,当此时选择一个案例时,NavigationView 的高度会刷新,一切都会恢复正常。因此,这也会发生在设备旋转时。

请注意,如果 NavigationView 在旋转/暂停应用时可见,则问题不会发生。

但并非所有设备都会出现此问题。这是我测试过的列表:

问题出现在:

  • 三星 Galaxy S2 平板电脑:Android 6.0.1
  • 三星 Galaxy S7 Edge:Android 6.0.1
  • HTC One A9s:Android 6.0
  • 三星 Galaxy Note 10.1:Android 5.11

问题没有出现在:

  • 索尼 Xperia XZ:Android 6.0.1
  • 华为荣耀7:Android 5.0.2
  • 华为 Nexus P6:Android 7.0

我已经尝试使 onPause 中的所有 View 无效,但没有任何帮助,我无法弄清楚我在哪里做错了。

其他说明:

  • compileSdkVersion = 25
  • targetSdkVersion = 25
  • 支持库版本:25.2.0
  • 构建工具版本:25.0.2
  • Gradle 插件版本: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>

在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

最佳答案

我发现了一个类似的问题,帮助 med 解决了我的问题 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 接口(interface)实现上面的 onDrawerSlide() 方法(mDrawerLayout 只是对 DrawerLayout 的本地引用).

关于android - 在某些设备上 onPause 后,NavigationDrawer 高度会折叠到工具栏的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42672253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com