现在很多APP都在使用侧滑栏来显示一些功能菜单,通过手势滑出菜单栏拥有非常好的用户体验,今天我们就来集成github上很火而且很好用的开源项目 SlidingMenu。地址:https://github.com/jfeinstein10/SlidingMenu
本文结束会提供我们今天的demo下载地址,免积分(demo是通过鸿洋_的博客demo更改)
1.导入SlidingMenu_library.
要想使用SlidingMenu我们需要将它作为Library导入我们的workspace,然后在我们自己的项目里引用它,具体操作这里就不在写一遍了,具体参考:http://blog.csdn.net/yangyu20121224/article/details/9255829.(有的时候这个:android-support-v4.jar 包可能会有冲突,只要把我们项目里的这个jar包删除就可以了)
2.把主界面MainActivity 继承 SlidingFragmentActivity(如果你的项目已经在MainActivity里写了不少东西了,不用担心,直接把继承的Activity改成继承SlidingFragmentActivity就可以了,然后重写oncreate方法就可以了).
public class MainActivity extends SlidingFragmentActivity{
}
3.在initMenu方法里初始化SlidingMenu的各种属性,MainActivity里的代码如下:(添加后把错误修改完毕就可以,其中各种参数设置代码里或者其他博客都有很详细的解释).
package com.dqk.slidingmenu;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.View;
import android.view.Window;
import com.example.dqk_slidingmenu.R;
import com.lxh.slidingmenu.lib.SlidingMenu;
import com.lxh.slidingmenu.lib.app.SlidingFragmentActivity;
public class MainActivity extends SlidingFragmentActivity{
private SlidingMenu menu;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initMenu();
}
private void initMenu() {
Fragment leftMenuFragment = new MenuLeftFragment();
setBehindContentView(R.layout.left_menu_frame);
getSupportFragmentManager().beginTransaction()
.replace(R.id.id_left_menu_frame, leftMenuFragment).commit();
menu = getSlidingMenu();
menu.setMode(SlidingMenu.LEFT_RIGHT);
// 设置触摸屏幕的模式
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
menu.setShadowWidthRes(R.dimen.shadow_width);
menu.setShadowDrawable(R.drawable.shadow);
// 设置滑动菜单视图的宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// menu.setBehindWidth()
// 设置渐入渐出效果的值
menu.setFadeDegree(0.35f);
// menu.setBehindScrollScale(1.0f);
menu.setSecondaryShadowDrawable(R.drawable.shadow);
// 设置右边(二级)侧滑菜单
menu.setSecondaryMenu(R.layout.right_menu_frame);
Fragment rightMenuFragment = new MenuRightFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.id_right_menu_frame, rightMenuFragment).commit();
}
public void showLeftMenu(View view) {
getSlidingMenu().showMenu();
// getSlidingMenu().showContent();
}
public void showRightMenu(View view) {
getSlidingMenu().showSecondaryMenu();
}
}
4.添加MenuLeftFragment,MenuRightFragment类,这里我们简单的显示一些ListView在这两个界面里,值得一提的是,
集成SlidingMenu后侧边栏的滑动是不会和主界面的各种滑动有冲突的,
5.贴上我们MenuLeftFragment的代码:
package com.dqk.slidingmenu;
import java.util.Arrays;
import java.util.List;
import com.example.dqk_slidingmenu.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MenuLeftFragment extends Fragment implements OnClickListener
{
private View mView;
private ListView mCategories;
private List<String> mDatas = Arrays
.asList("聊天", "发现", "通讯录", "朋友圈", "订阅号");
private ListAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
if (mView == null)
{
initView(inflater, container);
}
return mView;
}
private void initView(LayoutInflater inflater, ViewGroup container)
{
mView = inflater.inflate(R.layout.left_menu, container, false);
mCategories = (ListView) mView
.findViewById(R.id.id_listview_categories);
mAdapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, mDatas);
mCategories.setAdapter(mAdapter);
mView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(this.getActivity().getApplicationContext(), "你点击了mView",
Toast.LENGTH_SHORT).show();
//((MainActivity)getActivity()).getSlidingMenu().showContent();
((MainActivity)getActivity()).getSlidingMenu().toggle();
}
}
6.在我们的titlebar 也就是mView 我们添加了一个点击事件,点击之后弹出toast,而且会返回主界面,仔细看这行代码:
((MainActivity)getActivity()).getSlidingMenu().toggle();
我们是在得到MainActivity对象后执行的操作,所以如果你想在我们的侧边栏里操作跳转界面,或者操作一些数据例如sharedpreferences 等等,都可以通过getActivity来操作.
7.再把我们demo里的其他一些类和xml放到你的工程里就可以运行了.SlidingMenu有很多参数可以设定,自定义的空间很大,想实现一些动画,功能都非常的便捷,其他博客的资料也有很多,我就不一一赘述了,今天的博客就到这里;
(在我们的项目里dqk_slidingmenu是我们的工程包,slidingmenu_library就是library了,使用的时候导入就行.)