Android侧滑菜单

1.使用Android Support Library实现

Android目前提供了很方便的侧滑集成,效果如下图所示

具体实现如下:

如果你使用Android Studio,在你的build.gradle文件中添加

dependencies {
    ...
    compile ‘com.android.support:design:22.2.0‘
}

如果使用Eclipse(其实Android官方已经不推荐使用,如果要使用的话,可以参考http://developer.android.com/tools/support-library/setup.html

配置对应xml布局如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <android.support.v4.widget.DrawerLayout
 3     android:id="@+id/drawer_layout"
 4     xmlns:android="http://schemas.android.com/apk/res/android"
 5     xmlns:app="http://schemas.android.com/apk/res-auto"
 6     xmlns:tools="http://schemas.android.com/tools"
 7     android:layout_width="match_parent"
 8     android:layout_height="match_parent"
 9     android:fitsSystemWindows="true"
10     tools:openDrawer="start">
11
12     <!-- 这里添加你自己的ContentView -->
13
14     <RelativeLayout
15         xmlns:android="http://schemas.android.com/apk/res/android"
16         android:layout_width="match_parent"
17         android:layout_height="match_parent">
18
19         <LinearLayout
20             android:layout_width="match_parent"
21             android:layout_height="match_parent"
22             android:orientation="vertical"
23             android:paddingBottom="@dimen/activity_vertical_margin"
24             android:paddingLeft="@dimen/activity_horizontal_margin"
25             android:paddingRight="@dimen/activity_horizontal_margin"
26             android:paddingTop="@dimen/activity_vertical_margin">
27
28             <TextView
29                 android:layout_width="wrap_content"
30                 android:layout_height="wrap_content"
31                 android:text="Hello World!"/>
32
33         </LinearLayout>
34
35     </RelativeLayout>
36
37     <android.support.design.widget.NavigationView
38         android:id="@+id/nav_view"
39         android:layout_width="wrap_content"
40         android:layout_height="match_parent"
41         android:layout_gravity="start"
42         android:fitsSystemWindows="true"
43         app:headerLayout="@layout/nav_header_main"
44         app:menu="@menu/activity_main_drawer"/>
45
46 </android.support.v4.widget.DrawerLayout>

主要是 DrawerLayout、NavigationView

对应的headerLayout:nav_header_main.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3               android:layout_width="match_parent"
 4               android:layout_height="@dimen/nav_header_height"
 5               android:background="@drawable/side_nav_bar"
 6               android:paddingBottom="@dimen/activity_vertical_margin"
 7               android:paddingLeft="@dimen/activity_horizontal_margin"
 8               android:paddingRight="@dimen/activity_horizontal_margin"
 9               android:paddingTop="@dimen/activity_vertical_margin"
10               android:theme="@style/ThemeOverlay.AppCompat.Dark"
11               android:orientation="vertical"
12               android:gravity="bottom">
13
14     <ImageView
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:paddingTop="@dimen/nav_header_vertical_spacing"
18         android:src="@android:drawable/sym_def_app_icon"
19         android:id="@+id/imageView"/>
20
21     <TextView
22         android:layout_width="match_parent"
23         android:layout_height="wrap_content"
24         android:paddingTop="@dimen/nav_header_vertical_spacing"
25         android:text="Android Studio"
26         android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
27
28     <TextView
29         android:layout_width="wrap_content"
30         android:layout_height="wrap_content"
31         android:text="[email protected]"
32         android:id="@+id/textView"/>
33
34 </LinearLayout>

对应的menu:activity_main_drawer.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <menu xmlns:android="http://schemas.android.com/apk/res/android">
 3
 4     <group android:checkableBehavior="single">
 5         <item
 6             android:id="@+id/nav_camara"
 7             android:icon="@android:drawable/ic_menu_camera"
 8             android:title="Import"/>
 9         <item
10             android:id="@+id/nav_gallery"
11             android:icon="@android:drawable/ic_menu_gallery"
12             android:title="Gallery"/>
13         <item
14             android:id="@+id/nav_slideshow"
15             android:icon="@android:drawable/ic_menu_slideshow"
16             android:title="Slideshow"/>
17         <item
18             android:id="@+id/nav_manage"
19             android:icon="@android:drawable/ic_menu_manage"
20             android:title="Tools"/>
21     </group>
22
23     <item android:title="Communicate">
24         <menu>
25             <item
26                 android:id="@+id/nav_share"
27                 android:icon="@android:drawable/ic_menu_share"
28                 android:title="Share"/>
29             <item
30                 android:id="@+id/nav_send"
31                 android:icon="@android:drawable/ic_menu_send"
32                 android:title="Send"/>
33         </menu>
34     </item>
35
36 </menu>

对应Activity中的代码如下:

 1 package com.creasylai.testdrawermenu;
 2
 3 import android.os.Bundle;
 4 import android.support.design.widget.NavigationView;
 5 import android.support.v4.view.GravityCompat;
 6 import android.support.v4.widget.DrawerLayout;
 7 import android.support.v7.app.AppCompatActivity;
 8 import android.view.MenuItem;
 9
10 public class MainActivity extends AppCompatActivity
11         implements NavigationView.OnNavigationItemSelectedListener {
12
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.activity_main);
17         //需要监听菜单被选择事件
18         NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
19         navigationView.setNavigationItemSelectedListener(this);
20     }
21
22     /**
23      * 处理返回按钮时,首先检查并关闭侧滑
24      */
25     @Override
26     public void onBackPressed() {
27         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
28         if (drawer.isDrawerOpen(GravityCompat.START)) {
29             drawer.closeDrawer(GravityCompat.START);
30         } else {
31             super.onBackPressed();
32         }
33     }
34
35     @SuppressWarnings("StatementWithEmptyBody")
36     @Override
37     public boolean onNavigationItemSelected(MenuItem item) {
38         // Handle navigation view item clicks here.
39         int id = item.getItemId();
40
41         if (id == R.id.nav_camara) {
42             // Handle the camera action
43         } else if (id == R.id.nav_gallery) {
44
45         } else if (id == R.id.nav_slideshow) {
46
47         } else if (id == R.id.nav_manage) {
48
49         } else if (id == R.id.nav_share) {
50
51         } else if (id == R.id.nav_send) {
52
53         }
54         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
55         drawer.closeDrawer(GravityCompat.START);
56         return true;
57     }
58 }

就这么简单,侧滑功能实现了

参考:http://android-developers.blogspot.tw/2015/05/android-design-support-library.html

2.使用开源侧滑MaterialDrawer实现

在使用上述的侧滑过程中,我发现常会出现侧滑栏滑出一部分之后无法再滑动出来的bug,所以寻找了网上的开源侧滑项目MaterialDrawer

具体的实现就不写了,直接看(https://github.com/mikepenz/MaterialDrawer

Android侧滑菜单

时间: 2024-10-19 20:07:01

Android侧滑菜单的相关文章

Android 侧滑菜单的实现

Android 侧滑菜单的实现,参考网上的代码,实现侧滑菜单.最重要的是这个动画类UgcAnimations,如何使用动画类来侧滑的封装FlipperLayout. 本文项目源码:点击 1.实现效果 2.动画类UgcAnimations package com.mmsx.base; import android.content.Context; import android.view.View; import android.view.ViewGroup.MarginLayoutParams;

Android侧滑菜单DrawerLayout(抽屉布局)实现

应用场景: 由于侧滑菜单有更好的用户体验效果,所以更多的App使用侧滑抽屉式菜单列表,如网易客户端.百度影音.爱奇艺等等.至此,侧滑菜单有了更多的使用需求. 知识点介绍: 实现侧滑菜单功能的方法有很多,如果开源的项目SlidingMenu,下载地址为https://github.com/jfeinstein10/SlidingMenu.该开源项目依赖于另一个开源项目ActionBarSherlock,下载地址为https://github.com/JakeWharton/ActionBarShe

Android 侧滑菜单的简单实现(SlidingMenu)二

在上一篇博文中已经简单的实现了侧滑菜单,代码也很简单,就几行代码. 这篇文章依然讲侧滑菜单,与前一篇文章不同的是,这篇文章用不同的代码方式来实现侧滑菜单. 在前面的文章中已经用了在Activity中通过SlidingMenu构造方法直接设置侧滑菜单,这里换成通过Activity继承SlidingActivity来实现侧滑. 代码如下: public class MainActivity extends SlidingActivity 重写onCreate()方法: @Override publi

Android侧滑菜单完整详细示例(精装版)

MainActivity如下: package cn.patience7; import android.os.AsyncTask; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view

Android侧滑菜单完整详细示例(改进版)

MainActivity如下: package cc.cd; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter;

Android侧滑菜单完整详细示例(基础版)

MainActivity如下: package cc.cd; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.View.OnTouchListener; i

Android侧滑菜单DrawerLayout的使用

现在侧滑菜单使用很多,大都是通过SlidingMenu实现.现在也可以通过DrawerLayout 创建抽屉布局 frament_content.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="

Android 侧滑菜单的简单实现(SlidingMenu)

在我还没有学习Android的时候就用过侧滑菜单的APP,当时第一个感觉是:哇塞,这效果不错!当然,现在自己都已经学Android了,这效果当然也要做出来啊~ SlidingMenu是一种比较新的设置界面或配置界面的效果(我觉得已经不新了耶~),在主界面左滑或者右滑出现设置界面效果,能方便的进行各种操作.很多优秀的应用都采用了这种界面方案,像facebook.人人网.everynote.Google+等等.效果如下图: 其实网上已经有很多写SlidingMenu使用的文章了.不过,别人始终是别人

教你用DrawLayout 实现Android 侧滑菜单

现在的APP越来越注重用户体验,百度视频客户端有一个特效还是挺吸引人的,在主界面手指向右滑动,就可以将菜单展示出来,而主界面会被隐藏大部分,但是仍有左侧的一小部分同菜单一起展示.类似的还有天天动听,人人的客户端. 这个侧滑菜单的实现网上也有很多方法,比如最常用的是开源的SlidingMenu . 还有一种实现方式是在一个Activity的布局中分两部分,一个是菜单(menu)的布局,一个是内容(content)的布局.两个布局横向排列,菜单布局在左,内容布局在右.初始化的时候将菜单布局向左偏移,