Android-SlidingMenu
2016-05-27 21:50
405 查看
Android-SlidingMenu
下载libary
https://github.com/jfeinstein10/SlidingMenu导包
实现 1、创建自己的项目
在这提供两种方式来使用SlidingMenu第一种写法—直接实例化SlidingMenu,逻辑一般实现在activity中
private void initSlidingMenu() { // 初始化SlidingMenu对象 SlidingMenu menu = new SlidingMenu(this); // 设置侧滑方式为左侧侧滑 menu.setMode(SlidingMenu.LEFT); /* * 设置拖拽模式 SlidingMenu.TOUCHMODE_FULLSCREEN全屏触摸有效 * SlidingMenu.TOUCHMODE_MARGIN 拖拽边缘有效 SlidingMenu.TOUCHMODE_NONE * 不响应触摸事件 */ menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); // 设置阴影的宽度 menu.setShadowWidthRes(R.dimen.shadow_width); // 设置阴影的图片 menu.setShadowDrawable(R.drawable.shadow); // 设置sldingMenu的剩余大小---=内容显示页对应的dp大小 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); // 设置滑动时的渐变程度 menu.setFadeDegree(0.35f); // 使SlidingMenu附加在Activity右边 // SlidingMenu.SLIDING_CONTENT 将侧滑栏设置为在内容位置 // SlidingMenu.SLIDING_WINDOW 将侧滑栏设置为在整个窗口呈现 menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); // 设置SlidingMenu关联的布局 menu.setMenu(R.layout.menu); // 在SlidingMenu关联布局中查询控件 TextView tv_test = (TextView) menu.findViewById(R.id.tv_test); // 简单设置SlidingMenu界面显示内容 tv_test.setText("haha"); }
相关联的dimen配置
<resources> <dimen name="shadow_width">16dp</dimen> <dimen name="slidingmenu_offset">160dp</dimen> </resources>
运行效果
实现 2、写法—让类继承SlidingFragmentActivity或其他Sliding类型的Activity
这种写法可以单独将SlidingMenu要展示的内容抽取出来,放到某一个Fragment中去处理
代码演示:
public class MainActivity extends SlidingFragmentActivity { private SlidingMenu slidingMenu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // 内容页布局 setContentView(R.layout.activity_main); // 设置侧拉条目布局 setBehindContentView(R.layout.menu_frame); // 获取侧拉栏目对象 slidingMenu = getSlidingMenu(); /* * SlidingMenu.TOUCHMODE_FULLSCREEN全屏触摸有效 SlidingMenu.TOUCHMODE_MARGIN * 拖拽边缘有效 SlidingMenu.TOUCHMODE_NONE 不响应触摸事件 */ slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); // 设置内容显示页对应的dp大小 slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset); // //设置左侧侧拉栏目宽度 // slidingMenu.setBehindWidth(140); // 设置侧拉栏目所在位置 /* * SlidingMenu.LEFT SlidingMenu.LEFT_RIGHT SlidingMenu.RIGHT */ slidingMenu.setMode(SlidingMenu.LEFT); // 给侧拉栏目和左侧内容页区分开(加线) slidingMenu.setShadowDrawable(R.drawable.shadow); // 设置线的宽度 slidingMenu.setShadowWidthRes(R.dimen.shadow_width); // fragment去替换布局中节点 MenuFragment menuFragment = new MenuFragment(); // FragmentManager管理者 getSupportFragmentManager() // 开启事物 .beginTransaction() // 通过fragment去替换对应布局 .replace(R.id.menu, menuFragment, "MENU") // 提交事物 .commit(); }
MenuFragment代码
public class MenuFragment extends Fragment { private ListView listView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.menu_layout, container, false); listView = (ListView) view.findViewById(R.id.lv); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ArrayList<String> strList = new ArrayList<String>(); for (int i = 0; i < 10; i++) { strList.add("第" + i + "个条目"); } // 设置数据适配器 listView.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, strList)); } }
布局配置
activity_main 的布局配置<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > </RelativeLayout>
menu_frame的配置
<?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:orientation="vertical" > <FrameLayout android:id="@+id/menu" android:layout_width="wrap_content" android:layout_height="wrap_content" > </FrameLayout> </LinearLayout>
memu_layout的布局配置
运行效果
SlidingMenu和ViewPager的冲突处理
当界面使用viewPager来填充的时候,会出现一个问题,不管在什么位置,我们都能够将SlidingMenu拖拽出来,影响了ViewPager的正常滑动,我们可能会要求只有在第一页的时候,能够将SlidingMenu拖拽出来,其他时候,可以在最边缘位置,或者根本不拖拽出来。这里需要设置这样的代码// 设置ViewPager的监听事件
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override public void onPageSelected(int arg0) { // 当当天条目是0的时候,设置可以在任意位置拖拽出SlidingMenu if (arg0 == 0) { getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_FULLSCREEN); } else { // 当在其他位置的时候,设置不可以拖拽出来(SlidingMenu.TOUCHMODE_NONE),或只有在边缘位置才可以拖拽出来TOUCHMODE_MARGIN getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_NONE); } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { } });
相关文章推荐
- 初始android studio 的 Gradle Plugin
- 大话Binder机制
- 实习入职第七天:android Mediaplayer各种属性和方法简单介绍
- Android聊天室
- android activity返回键被dialog屏蔽
- Android AsyncTask介绍
- viewpager+fragment来回滑动fragment重新加载的简单解决办法
- android-----解决Bitmap内存溢出的一种方法(图片压缩技术)
- android 命令行签名apk
- Android 4.0及以下版本短信漏洞
- Android 序列化
- Android基于特征码查杀手机病毒
- Android 自定义View (一)
- AndroidStudio的用法详解
- AndroidAnnotations(Code Diet)android快速开发框架
- CaysnPrinter开发包接口说明文档 - PrinterLibs For Android
- android socket通讯过程?
- Android 打印输出16进制数据
- getSerializableExtra用法体会
- Android Fragment完全解析