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

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

先上几张截图:


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

 
 
<?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









猜你喜欢

转载自blog.csdn.net/weixin_42267745/article/details/80473938