android - NavigationView 打开速度慢/跳帧(Android 设计库)

标签 android android-design-library navigationview

我正在使用 Android Design Library 提供的 NavigationView .我发现在添加了一些表现很差的项目之后。首次启动时,第一次打开需要一秒钟左右的时间。这是 UI 的屏幕截图。

enter image description here

我会尝试发布一些相关的代码。

抽屉 XML

<group android:checkableBehavior="single">

    <item
        android:id="@+id/home"
        android:checked="false"
        android:icon="@drawable/ic_home"
        android:title="Home" />

    <item
        android:id="@+id/about"
        android:checked="false"
        android:icon="@drawable/ic_about"
        android:title="About" />

    <item
        android:id="@+id/gallery"
        android:checked="false"
        android:icon="@drawable/ic_gallery"
        android:title="Gallery" />
    <item
        android:id="@+id/settings"
        android:icon="@drawable/ic_action_settings"
        android:title="Settings" />

    <item
        android:id="@+id/navigation_subheader"
        android:title="Categories">
        <menu>

            <item
                android:id="@+id/science"
                android:checked="false"
                android:icon="@drawable/ic_science"
                android:title="Science" />

            <item
                android:id="@+id/parenting"
                android:checked="false"
                android:icon="@drawable/ic_parenting"
                android:title="Parenting" />
            <item
                android:id="@+id/android"
                android:checked="false"
                android:icon="@drawable/ic_android"
                android:title="Android" />
            <item
                android:id="@+id/technology"
                android:checked="false"
                android:icon="@drawable/ic_tech"
                android:title="Technology" />
            <item
                android:title=""
                android:checkable="false"
                android:visible="false"
                android:orderInCategory="200"/>

        </menu>
    </item>
</group>

主线

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    // Initializing Toolbar and setting it as the actionbar
    toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);


    //Initializing NavigationView
    navigationView = (NavigationView) findViewById(R.id.navigation_view);

    //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

        // This method will trigger on item Click of navigation menu
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {


            //Checking if the item is in checked state or not, if not make it in checked state
            if (menuItem.isChecked()) menuItem.setChecked(false);
            else menuItem.setChecked(true);

            //Closing drawer on item click
            drawerLayout.closeDrawers();

            Log.v(TAG + "-S", "Pre_Switch = " + mCurCheckPosition);

            //Check to see which item was being clicked and perform appropriate action
            switch (menuItem.getItemId()) {


                case R.id.home:
                    homeFragment();
                    return true;
                case R.id.about:
                    webFragment();
                    return true;
                case R.id.gallery:
                    galleryFragment();
                    return true;
                case R.id.science:
                    scienceFragment();
                    return true;
                case R.id.parenting:
                    parentingFragment();
                    return true;
                case R.id.android:
                    androidFragment();
                    return true;
                case R.id.technology:
                    technologyFragment();
                    return true;
                case R.id.settings:
                    Intent i = new Intent(MainActivity.this, SettingsActivity.class);
                    startActivity(i);
                default:
                    return true;


            }
        }
    });

    // Initializing Drawer Layout and ActionBarToggle
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer);
    ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.openDrawer, R.string.closeDrawer){

        @Override
        public void onDrawerClosed(View drawerView) {
            // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank
            super.onDrawerClosed(drawerView);
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank
            super.onDrawerOpened(drawerView);
        }
    };

    //Setting the actionbarToggle to drawer layout
    drawerLayout.setDrawerListener(actionBarDrawerToggle);

    //calling sync state is necessay or else your hamburger icon wont show up
    actionBarDrawerToggle.syncState();

}

最后这是我在 Choreographer 的日志中看到的错误,我希望这只是库中的一个错误,但我想知道是否有人遇到过这个问题并且可能有解决方法。

I/Choreographer﹕ Skipped 117 frames!  The application may be doing too much work on its main thread.

此处提供完整源代码:https://github.com/caman9119/The_Jones_Theory

最佳答案

在我的 header.xml 中发现了问题,我使用的是 1080x720p 的 background.png。我将图像缩小到 ~400x300,瞧,这确实是个有趣的问题。

关于android - NavigationView 打开速度慢/跳帧(Android 设计库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31148445/

相关文章:

java - 膨胀类 NavigationView 时出错

android - 如何在 NavigationView 中添加其他布局

android - 错误:(31,0)未找到Gradle DSL方法: 'targetSdkVersion()'

android - 需要不可用的共享库 com.sec.android.app.multiwindow;失败(启用多窗口)

机器人 : TextInputLayout hides drawableRight of child EditText

android - 如何使用带有 fragment 的 Android AppBarLayout、Toolbar 和 TabLayout

android - 使用 NavigationView 时如何更改子菜单标题的颜色 - Android

android - Android Studio 4.1中的构建失败

android - 如何从 Android 设备获取默认的 HTTP USER AGENT?

两个 Activity 之间的Android共享元素转换不起作用