前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【干货】Android-侧拉框实现【2019最新版】

【干货】Android-侧拉框实现【2019最新版】

作者头像
圆号本昊
发布2021-09-24 11:58:48
4150
发布2021-09-24 11:58:48
举报
文章被收录于专栏:github@hornhuang

欢迎转载,转载请注明出处

这里我就不啰里巴嗦了,这个写法是我昨天看到的,感觉非常有用,这里给大家分享下:


直接上源码:

首先是主布局:

代码语言:javascript
复制

这里我们可以看到,我引用了:"@layout/include_list_viewpager" 和 "@menu/drawer_view" 两个文件,第一个是主活动布局,第二个是侧拉框栏目,现在给出他们的实现,首先是主活动(我这里给空的,你们根据自己需要添加控件):

代码语言:javascript
复制

然后是侧拉框的栏目:

代码语言:javascript
复制

 ok,那现在来看主活动,用 Runnable 绑定侧拉框各项,再用 Handle 实时监听,关于 Constants 是一个由于放字符串(可理解为 id )的静态类:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

    private NavigationView navigationView;
    private Map navigationMap = new HashMap();
    private Handler navDrawerRunnable = new Handler();
    private Runnable runnable;
    private DrawerLayout mDrawerLayout;

    private Runnable navigateLibrary = new Runnable() {
        public void run() {
            Toast.makeText(MainActivity.this,"Library",Toast.LENGTH_SHORT).show();
        }
    };

    private Runnable navigatePlaylist = new Runnable() {
        public void run() {
            Toast.makeText(MainActivity.this,"Playlist",Toast.LENGTH_SHORT).show();
        }
    };

    private Runnable navigateFolder = new Runnable() {
        public void run() {
            Toast.makeText(MainActivity.this,"Folder",Toast.LENGTH_SHORT).show();
        }
    };

    private Runnable navigateQueue = new Runnable() {
        public void run() {
            Toast.makeText(MainActivity.this,"Queue",Toast.LENGTH_SHORT).show();
        }
    };

    private Runnable navigateAlbum = new Runnable() {
        public void run() {
            Toast.makeText(MainActivity.this,"Album",Toast.LENGTH_SHORT).show();
        }
    };

    private Runnable navigateArtist = new Runnable() {
        public void run() {
            Toast.makeText(MainActivity.this,"Artist",Toast.LENGTH_SHORT).show();
        }
    };

    private Runnable navigateLyrics = new Runnable() {
        public void run() {
            Toast.makeText(MainActivity.this,"Lyrics",Toast.LENGTH_SHORT).show();
        }
    };

    private Runnable navigateNowplaying = new Runnable() {
        public void run() {
            Toast.makeText(MainActivity.this,"Nowplaying",Toast.LENGTH_SHORT).show();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        navigationMap.put(Constants.NAVIGATE_LIBRARY, navigateLibrary);
        navigationMap.put(Constants.NAVIGATE_PLAYLIST, navigatePlaylist);
        navigationMap.put(Constants.NAVIGATE_QUEUE, navigateQueue);
        navigationMap.put(Constants.NAVIGATE_NOWPLAYING, navigateNowplaying);
        navigationMap.put(Constants.NAVIGATE_ALBUM, navigateAlbum);
        navigationMap.put(Constants.NAVIGATE_ARTIST, navigateArtist);
        navigationMap.put(Constants.NAVIGATE_LYRICS, navigateLyrics);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        navigationView = (NavigationView) findViewById(R.id.nav_view);
        View header = navigationView.inflateHeaderView(R.layout.nav_header);

        navDrawerRunnable.postDelayed(new Runnable() {
            @Override
            public void run() {
                setupDrawerContent(navigationView);
            }
        }, 700);

    }
    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(final MenuItem menuItem) {
                        updatePosition(menuItem);
                        return true;
                    }
                });
    }



    private void updatePosition(final MenuItem menuItem) {
        runnable = null;

        switch (menuItem.getItemId()) {
            case R.id.nav_library:
                runnable = navigateLibrary;

                break;
            case R.id.nav_playlists:
                runnable = navigatePlaylist;

                break;
            case R.id.nav_folders:
                runnable = navigateFolder;

                break;
            case R.id.nav_nowplaying:

                break;
            case R.id.nav_queue:
                runnable = navigateQueue;

                break;
            case R.id.nav_settings:
                runnable = navigateAlbum;
                break;
            case R.id.nav_about:
                runnable = navigateArtist;

                break;
            case R.id.nav_donate:
                runnable = navigateLyrics;

                break;
        }

        if (runnable != null) {
            menuItem.setChecked(true);
            mDrawerLayout.closeDrawers();
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    runnable.run();
                }
            }, 350);
        }
    }
}

ok,顺便来一波 Constants 类:

代码语言:javascript
复制
public class Constants {

    public static final String NAVIGATE_LIBRARY = "navigate_library";
    public static final String NAVIGATE_PLAYLIST = "navigate_playlist";
    public static final String NAVIGATE_QUEUE = "navigate_queue";
    public static final String NAVIGATE_ALBUM = "navigate_album";
    public static final String NAVIGATE_ARTIST = "navigate_artist";
    public static final String NAVIGATE_NOWPLAYING = "navigate_nowplaying";
    public static final String NAVIGATE_LYRICS = "navigate_lyrics";
}

这里可能需要一些依赖比如:NavigationView 需要添加:

代码语言:javascript
复制
implementation 'com.android.support:design:28.0.0'

其他依赖我救不一一给出了,大家根据需要自行百度 ~

【如果本文对您有帮助,欢迎关注我获得跟多资讯】

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/02/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 这里我就不啰里巴嗦了,这个写法是我昨天看到的,感觉非常有用,这里给大家分享下:
  • 直接上源码:
    • 首先是主布局:
      • 这里我们可以看到,我引用了:"@layout/include_list_viewpager" 和 "@menu/drawer_view" 两个文件,第一个是主活动布局,第二个是侧拉框栏目,现在给出他们的实现,首先是主活动(我这里给空的,你们根据自己需要添加控件):
        • 然后是侧拉框的栏目:
          •  ok,那现在来看主活动,用 Runnable 绑定侧拉框各项,再用 Handle 实时监听,关于 Constants 是一个由于放字符串(可理解为 id )的静态类:
            • ok,顺便来一波 Constants 类:
              • 这里可能需要一些依赖比如:NavigationView 需要添加:
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档