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

版权声明:个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢! 转载请注明出处 谢谢合作 https://blog.csdn.net/qq_43377749/article/details/86737747

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

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


直接上源码:

首先是主布局:

<?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"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <include layout="@layout/include_list_viewpager" />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:menu="@menu/drawer_view" />

</android.support.v4.widget.DrawerLayout>

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

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/content_root"
    android:background="#553322"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    
</FrameLayout>

然后是侧拉框的栏目:

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group
        android:id="@+id/group1"
        android:checkableBehavior="single">
        <item
            android:id="@+id/nav_library"

            android:title="@string/library" />
        <item
            android:id="@+id/nav_playlists"

            android:title="@string/playlists" />
        <item
            android:id="@+id/nav_folders"

            android:title="@string/folders" />
        <item
            android:id="@+id/nav_queue"

            android:title="@string/playing_queue" />
        <item
            android:id="@+id/nav_nowplaying"
            android:checkable="false"
            android:title="@string/now_playing" />

    </group>

    <group
        android:id="@+id/group2"
        android:checkableBehavior="none">
        <item

            android:id="@+id/nav_settings"
            android:title="@string/settings" />

        <item

            android:id="@+id/nav_about"
            android:title="@string/about" />

        <item
            android:id="@+id/nav_donate"
            android:title="Support development" />

    </group>



</menu>

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

public class MainActivity extends AppCompatActivity {

    private NavigationView navigationView;
    private Map<String, Runnable> navigationMap = new HashMap<String, Runnable>();
    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 类:

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 需要添加:

implementation 'com.android.support:design:28.0.0'

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

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

猜你喜欢

转载自blog.csdn.net/qq_43377749/article/details/86737747