本文出自:http://blog.csdn.net/dt235201314/article/details/78962509
一丶概述
Android侧滑效果实现有很多种,这里先说说,Android系统5.0后自带的DrawerLayout + NavigationView。
二丶效果图
1.gif三丶看代码
DrawerLayout + NavigationView xml布局
<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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/blue_bg">
<com.example.jinboy.codertodeveloperbytcler.java_demo.appdemo.ui.view.CircleImageView
android:id="@+id/iv_mine_avatar"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_below="@+id/title_bar"
android:layout_marginStart="10dp"
android:src="@drawable/mine_me"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="CSDN 博客"
android:textColor="@android:color/black"
android:textSize="20sp"
android:textStyle="bold" />
</RelativeLayout>
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
NavigationView里的headerLayout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_evenings"
android:orientation="vertical">
<com.example.jinboy.codertodeveloperbytcler.java_demo.appdemo.ui.view.CircleImageView
android:id="@+id/iv_mine_avatar"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_below="@+id/title_bar"
android:layout_centerHorizontal="true"
android:layout_marginStart="10dp"
android:layout_marginTop="50dp"
android:src="@drawable/mine_me"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_marginEnd="10dp"
android:layout_marginStart="10dp"
android:layout_marginTop="20dp"
android:text="我的博客地址:\nhttp://blog.csdn.net/dt235201314"
android:textColor="@color/white"
android:textSize="15sp"
android:textStyle="bold" />
</LinearLayout>
menu
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_csdn"
android:icon="@mipmap/mine_about_icon"
android:title="CSDN" />
<item
android:id="@+id/nav_jianshu"
android:icon="@mipmap/mine_about_icon"
android:title="简书" />
</group>
</menu>
分别对应
属性设置注意点:
1.android:layout_gravity="left"或者“star”表示从左边弹出,这里跟后面java代码关闭相关
drawerLayout.closeDrawer(GravityCompat.START);
2.app:itemIconTint="@color/blue" 设置菜单选项图片颜色,不写默认为无色(灰色),如需要现实为图片原本颜色java代码设置
navigationView.setItemIconTintList(null);
Activity java代码
public class MyCsdnActivity extends Activity implements NavigationView.OnNavigationItemSelectedListener {
private DrawerLayout drawerLayout;
private CircleImageView circleImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_csdn_activity);
initView();
}
private void initView() {
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
circleImageView = (CircleImageView) findViewById(R.id.iv_mine_avatar);
NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
navigationView.setNavigationItemSelectedListener(this);
navigationView.setItemIconTintList(null);
circleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawerLayout.openDrawer(GravityCompat.START);
}
});
}
/**
* 菜单点击响应函数
*
* @param item 菜单
* @return boolean
*/
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
drawerLayout.closeDrawer(GravityCompat.START);
switch (item.getItemId()) {
case R.id.nav_csdn:
WebViewActivity.startWebViewActivity(this,"http://my.csdn.net/dt235201314");
break;
case R.id.nav_jianshu:
WebViewActivity.startWebViewActivity(this,"http://www.jianshu.com/u/905c7de5ae83");
break;
default:
}
return false;
}
/**
* 重写返回键响应函数
*/
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
}
3.NavigationView头部布局的id
NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
View headerView = navigationView.getHeaderView(0);
tv_name = (TextView) headerView.findViewById(R.id.tv_name);
tv_originalArticleNumber = (TextView) headerView.findViewById(R.id.tv_originalArticleNumber);
tv_visitNumber = (TextView) headerView.findViewById(R.id.tv_visitNumber);
四丶文章参考
五丶代码下载欢迎关注点赞
https://github.com/JinBoy23520/CoderToDeveloperByTCLer
如果文章对你有帮助欢迎专注Star
网友评论