效果图:
SlidingMenu是什么就不必再说了,非常有名,花了一天时间了解了一下开源项目SlidingMenu,做了个简单的example,主要是前期导入时遇到问题浪费了一些时间。
SlidingMenu依赖于另一个开源项目ActionBarSherlock,所以需要将ActionBarSherlock添加作为SlidingMenu的库工程,然后再将SlidingMenu添加到自己的工程中去。
SlidingMenu下载地址:https://github.com/jfeinstein10/SlidingMenu
ActionBarSherlock下载地址:https://github.com/JakeWharton/ActionBarSherlock
SlidingMenu的各个属性的作用(摘自网络):
menu.setMode(SlidingMenu.LEFT);//设置左滑菜单
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕范围,该设置为全屏区域都可以滑动
menu.setShadowDrawable(R.drawable.shadow);//设置阴影图片
menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu滑出时主页面显示的剩余宽度
menu.setBehindWidth(400);//设置SlidingMenu菜单的宽度
menu.setFadeDegree(0.35f);//SlidingMenu滑动时的渐变程度
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上
menu.setMenu(R.layout.menu_layout);//设置menu的布局文件
menu.toggle();//动态判断自动关闭或开启SlidingMenu
menu.showMenu();//显示SlidingMenu
menu.showContent();//显示内容
menu.setOnOpenListener(onOpenListener);//监听slidingmenu打开
//关于关闭menu有两个监听,简单的来说,对于menu close事件,一个是when,一个是after
menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭时事件
menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭后事件
//左右都可以滑出SlidingMenu菜单只需要设置
menu.setMode(SlidingMenu.LEFT_RIGHT);//属性,然后设置右侧菜单的布局文件
menu.setSecondaryShadowDrawable(R.drawable.shadowright);//右侧菜单的阴影图片
主要代码:
values/dimens.xml
<resources>
<dimen name="slidingmenu_offset">50dp</dimen>
<dimen name="shadow_width">0dp</dimen>
</resources>
这两个属性配置必不可少
layout/content_frame.xml
<?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="match_parent"
android:background="#ffffff" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Content" />
</LinearLayout>
layout/menu_frame.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
layout/menuaa.xml
<?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="match_parent"
android:background="@drawable/ic_launcher" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Menu" />
</LinearLayout>
AttachExample
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import com.slidingmenu.lib.SlidingMenu;
public class AttachExample extends FragmentActivity {
private SlidingMenu menu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 该layout为一个全屏的Layout
setContentView(R.layout.content_frame);
// fragmentReplace(R.id.content_frame, new ContentFragment());
// 配置SlidingMenu参数
menu = new SlidingMenu(this);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);// 设置滑动的区域
// menu.setShadowDrawable(R.drawable.shadow);//设置阴影图片
menu.setShadowWidthRes(R.dimen.shadow_width);// 设置阴影图片的宽度,这里不设置也必须要给值在dimens.xml里
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);// SlidingMenu划出时主页面显示的剩余宽度,必须要给值
menu.setFadeDegree(0.3f);// SlidingMenu滑动时menu的渐变程度
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);// 使SlidingMenu附加在Activity上
menu.setMenu(R.layout.menu_frame);// 设置menu的布局文件
menu.setBehindScrollScale(0f);// SlidingMenu滑动时menu滑动出来的速度
fragmentReplace(R.id.menu_frame, new MenuFragment());
}
@Override
public void onBackPressed() {
if (menu.isMenuShowing()) {
menu.showContent();
} else {
super.onBackPressed();
}
}
/**
* layout片断管理
*
* @param layoutResId
* 被替换者layout
* @param fragment
* 替换者Fragment
*/
private void fragmentReplace(int layoutResId, Fragment fragment) {
getSupportFragmentManager().beginTransaction()
.replace(layoutResId, fragment).commit();
}
}
ContentFragment(暂时没用上)
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ContentFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.content_frame, null);
}
}
MenuFragment
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MenuFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.menuaa, null);
}
}