版权声明:个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢! 转载请注明出处 谢谢合作 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'
其他依赖我救不一一给出了,大家根据需要自行百度 ~
【如果本文对您有帮助,欢迎关注我获得跟多资讯】