android侧滑菜单整理(一)

新的一年,新的开始。没有开始上班,就好好整理一下去年的东西,发现太多了,唉,慢慢自己整吧,也应该来说这是属于自己学到的知识吧,虽然有的很简单,但我还是好好写下来吧。
这次主要记录的是侧滑菜单。侧滑菜单基本上各家各家的写法,我也就记录一下基本的方式,存在的其他的方式,我想以后我会补上的,当然这基本上是自己项目中用到的。

SlidingPaneLayout + LinearLayout

具体实现的效果如下:
android侧滑菜单整理(一)_第1张图片
这里的SlidingPanelLayout是android.support.v4.widget包的下的,用的不多,它继承了ViewGroup,实现了侧滑的效果。实现原理根据其名字我们就能清楚,它是通过UI来展示相关层级是否可见的. 具体的xml如下:

.support.v4.widget.SlidingPaneLayout
    android:id="@+id/slidingPaneLayout"
    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="#78A7A7">

    "@+id/ll_menu"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:gravity="center">

        "wrap_content"
            android:layout_height="wrap_content"
            android:text="Menu"/>

    

    "@+id/ll_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFF">

        .support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

    

.support.v4.widget.SlidingPaneLayout>

可以看出,就是id为ll_main的layout直接压在的ll_menu的layout之上的,这样就有一个缺点,很明显ToolBar也会随着滑动,位置也会发生改变,怎么说呢,这应该不算是一个缺点吧,看我们的项目经理怎么看吧。Activity代码就不贴了,稍后demo中都有。看过很多项目,这里说真的用的蛮少的,最缺的条件下,大不了我们自定义吧。

DrawerLayout + LinearLayout

效果如下:
android侧滑菜单整理(一)_第2张图片

xml代码为:

"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:orientation="vertical">

    .support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:title="drawerLayout"/>

    .support.v4.widget.DrawerLayout
        android:id="@+id/dl_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        "match_parent"
            android:layout_height="match_parent"
            android:background="#FFF"
            android:orientation="vertical">

            "match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="content"/>

        

        "@+id/ll_menu"
            android:layout_width="200dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="#A03434"
            android:gravity="center">

            "wrap_content"
                android:layout_height="wrap_content"
                android:text="Menu"/>
        

    .support.v4.widget.DrawerLayout>

可以看出,DrawerLayout中的布局与SlidePanelLayout中布局差不多,只不过它们的menu文件,顺序是不一致的。在DrawerLayout中如果ll_menu在ll_content中上层时,侧滑菜单也是可以出现的,但是却不能用手势关闭。

DrawerLayout+NavigationView

这个是MD风格的侧滑,当然NavigationView是android.support.design.widget包下的,效果肯定会惊艳些:
android侧滑菜单整理(一)_第3张图片

xml文件与DrawerLayout中xml文件差不多:

.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout"
    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">

    "match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        .support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

        "match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="content"/>

    

    .support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/head_layout"
        app:menu="@menu/layout_menu">

    .support.design.widget.NavigationView>

.support.v4.widget.DrawerLayout>

主要是NavigationView中的自定义的属性值,一般也就注意一下headerLayout和menu,这个看图基本上清楚了:
android侧滑菜单整理(一)_第4张图片

全部代码在这里,这里也基本上介绍了简单的用法,没有分析其中内部的原理,以后有时间再说吧,毕竟这是个麻烦事。。。

你可能感兴趣的:(android)