您的位置:首页 > 移动开发 > Android开发

Android 通过NavigationView+DrawerLayout来实现侧滑菜单的功能和点击事件+弹出对话框

2018-05-27 23:57 671 查看

一直想侧滑来着,今天终于开始了,。

先上几张截图:


1.首先要在project structure的dependence中导入v4.design包,导入后可以在build.grade下看到如下信息:

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

2.使用NavigationView
首先在主布局文件中使用DrawerLayout作为外包装,里面包含一个主页面和侧滑的菜单页面,而侧滑菜单页面用NavigationView实现:
上代码了:

activity布局:一个DrawerLayout+NavigationView

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawerlayout"
tools:openDrawer="start"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.NavigationView
android:id="@+id/navigationview"
android:layout_gravity="left"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:headerLayout="@layout/activity_handerlayout"
app:menu="@menu/mymenu">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
然后我们可以看到

3.我们需要写一个头部布局和menu布局

首先mynenu布局:有四个item,item里面有ID+图片+名字

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/page"
android:icon="@drawable/radio_button_pic1"
android:title="    首页"/>

<item
android:id="@+id/read"
android:icon="@drawable/radio_button_pic2"

android:title="    订阅"/>
<item
android:id="@+id/found"
android:icon="@drawable/radio_button_pic3"
android:title="    发现"/>
<item
android:id="@+id/myself"
android:icon="@drawable/radio_button_pic4"
android:title="    我的"/>

</menu>
接着头部布局:头布局内容很简单,只包含一张图片和两个textview
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="#f7e8e7"
android:layout_height="match_parent">
<ImageView
android:id="@+id/person"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_gravity="center"
android:layout_marginTop="42dp"
android:src="@drawable/back1"/>
<TextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:layout_gravity="center"
android:layout_marginTop="24dp"
android:textColor="#ffffff"
android:textStyle="bold"
android:text="坏小子"/>
<TextView
android:id="@+id/tv_lable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_gravity="center"
android:layout_marginTop="12dp"
android:textColor="#ffffff"
android:textStyle="bold"
android:layout_marginBottom="18dp"
android:text="人生像一场没有尽头的旅行"/>
</LinearLayout>
menu里包含了各个菜单项,每个菜单项可以设置icon和title以及点击状态,。

现在我们写activity的实现及跳转,。

public class DrawelayoutActivity extends AppCompatActivity {
private DrawerLayout drawerlayout;
private NavigationView navigationview;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawerlayout);

drawerlayout=findViewById(R.id.drawerlayout);
navigationview=findViewById(R.id.navigationview);
navigationview.setItemIconTintList(null);
View headerView = navigationview.getHeaderView(0);//获取头布局
navigationview.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.page:
IntentUtils.SetIntent(DrawelayoutActivity.this,FirstActivity.class);
break;
case R.id.read:
IntentUtils.SetIntent(DrawelayoutActivity.this,FiveActivity.class);
break;
case R.id.found:
IntentUtils.SetIntent(DrawelayoutActivity.this,fourthActivity.class);
break;
case R.id.myself:
IntentUtils.SetIntent(DrawelayoutActivity.this,CenterActivity.class);
break;
}
return true;
}
});

}
}

import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
DrawerLayou是V4包,NavigationView是V7包,。到这里就基本实现了,。下面我贴一个跳转的工具类:
public class IntentUtils {

public static  void SetIntent(Context context,Class<?>mClass){
Intent intent = new Intent();
intent.setClass(context, mClass);
context.startActivity(intent);
}

public static  void SetIntentandfinish(Context context,Class<?>mClass,boolean isclose){
Intent intent = new Intent();
intent.setClass(context, mClass);
context.startActivity(intent);
if (isclose){
((Activity)context).finish();
}
}

public static void SetIntentBundle(Context context, Class<?>mClass, Bundle bundle){
Intent intent = new Intent();
intent.setClass(context, mClass);
intent.putExtra("bundle",bundle);
context.startActivity(intent);

}
}
有四个跳转页面,这里只贴出一个,也只实现一个跳转页面的点击事件,。

activity_first布局:很简单,只有一个TextView

[code]<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:id="@+id/dialog1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:padding="10dp"
android:gravity="center"
android:text="普通ialog" />
</LinearLayout>

写实现跳转页面的点击事件:
public class FirstActivity extends AppCompatActivity {
private TextView textView;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
textView=findViewById(R.id.dialog1);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new android.app.AlertDialog.Builder(FirstActivity.this)
.setTitle("系统提示")
.setMessage("这是一个普通的对话框")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(FirstActivity.this, "确定", Toast.LENGTH_SHORT).show();
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {

Toast.makeText(FirstActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
}).show();
}
});
}
}

好了,其他具体功能可以根据需要自己添加,。
源码下载地址:https://download.csdn.net/download/weixin_42267745/10443483









阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: