安卓高级4 第三方库SlidingMenu的使用
来源:互联网 发布:iphone6s网络模块坏了 编辑:程序博客网 时间:2024/06/08 04:03
源码位于github上(本人fork地址):点击进入地址
效果图:
- 使用方法:下载源码后 解压其中的文件夹library 到任意地方
- 修改library中gragle 其方法参考另一个博客(建议先修改后倒入studio)此参考链接中是先导入我个人不推荐可能出什么问题
具体参考 - 将linbrary导入到studio
- 新建项目添加依赖
参考手册:
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);//右侧菜单的阴影图片
设置SlidingMenu属性
sm = getSlidingMenu();
//如果只显示左侧菜单就是用LEFT,右侧就RIGHT,左右都支持就LEFT_RIGHT
sm.setMode(SlidingMenu.LEFT_RIGHT);//设置菜单滑动模式,菜单是出现在左侧还是右侧,还是左右两侧都有
sm.setShadowDrawable(R.drawable.shadow);//设置阴影的图片资源
sm.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
//sm.setBehindWidth(200);//设置菜单的宽
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的区域
支持右侧划出菜单:
//SlidingMenu可以同时支持划出左右两侧的菜单,互不冲突,而且动画优美,体验良好。
sm.setSecondaryMenu(R.layout.menu_frame2);//设置右侧菜单
sm.setSecondaryShadowDrawable(R.drawable.shadowright);//设置右侧菜单阴影的图片资源
//右侧SlidingMenu的Fragment
getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame2, new SampleListFragment()).commit();
slidingMenu = getSlidingMenu();
//设置是左滑还是右滑,还是左右都可以滑
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
//设置阴影宽度
slidingMenu.setShadowWidth(getWindowManager().getDefaultDisplay().getWidth() / 40);
//设置左菜单阴影图片
slidingMenu.setShadowDrawable(R.drawable.shadow);
//设置右菜单阴影图片
slidingMenu.setSecondaryShadowDrawable(R.drawable.right_shadow);
//设置菜单占屏幕的比例
slidingMenu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() / 5);
//设置滑动时菜单的是否淡入淡出
slidingMenu.setFadeEnabled(true);
//设置淡入淡出的比例
slidingMenu.setFadeDegree(0.4f);
//设置滑动时拖拽效果
slidingMenu.setBehindScrollScale(0);
//设置要使菜单滑动,触碰屏幕的范围
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
案例
文件结构:
MainActivity :
package com.example.myapp2;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;import static com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.SLIDING_CONTENT;import static com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.TOUCHMODE_FULLSCREEN;public class MainActivity extends AppCompatActivity { private SlidingMenu slidingMenu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建一个滑动类 slidingMenu = new SlidingMenu(this); //设置侧滑测单是在左手还是右边 或者两个都有 //SlidingMenu.LEFT_RIGHT 两个都有 //SlidingMenu.LEFT 左边有侧滑栏 //SlidingMenu.RIGHT 右边有侧滑栏 slidingMenu.setMode(SlidingMenu.LEFT_RIGHT); //设置触摸模式 //TOUCHMODE_FULLSCREEN 整个屏幕都可以拉动打开侧滑栏 //TOUCHMODE_MARGIN 只有最左边向右拉 或者最右边像左拉才有效果 //TOUCHMODE_NONE 关闭侧滑 slidingMenu.setTouchModeAbove(TOUCHMODE_FULLSCREEN); //设置两个侧滑栏需要隐藏的宽度(换个说法就是其原本宽度-300),只用户左右滑动abs(300)时侧滑栏完全显示 //也可以说侧滑栏完全显示和内容交界线到另一端的距离 slidingMenu.setBehindOffset(300); //设置左边的侧滑栏内容布局 slidingMenu.setMenu(R.layout.left_layout); //设置右边侧滑栏内容 slidingMenu.setSecondaryMenu(R.layout.left_layout); //是否开启拉出侧滑栏时淡出效果 初始化值为0.6f直到1完全显示 左右两边同时生效 slidingMenu.setFadeEnabled(true); slidingMenu.setFadeDegree(0.6f); //设置有左边分割线图像和大小 slidingMenu.setShadowDrawable(R.mipmap.ic_launcher); //设置右边分割线图像 slidingMenu.setSecondaryShadowDrawable(R.mipmap.ic_launcher); //设置分割线的大小两边生效 slidingMenu.setShadowWidth(20); //当侧滑栏完全关闭的时候调用 两边都有效果 slidingMenu.setOnClosedListener(new SlidingMenu.OnClosedListener() { @Override public void onClosed() { } }); //当侧滑栏关闭的时候调用 两边都有效果 slidingMenu.setOnCloseListener(new SlidingMenu.OnCloseListener() { @Override public void onClose() { } }); //当侧滑栏完全开启的时候调用 两边都有效果 slidingMenu.setOnOpenedListener(new SlidingMenu.OnOpenedListener() { @Override public void onOpened() { } }); /** * 此处有坑 注意:右手边的不调用此方法 */ //当侧滑栏完全开启的时候调用 只有左手边调用 slidingMenu.setOnOpenListener(new SlidingMenu.OnOpenListener() { @Override public void onOpen() { } }); slidingMenu.attachToActivity(this, SLIDING_CONTENT); } public void onclicLeft(View view) { Button btn = (Button) view; //左手侧滑栏是打开的 if (slidingMenu.isMenuShowing()) { slidingMenu.showContent(); btn.setText("开启左边"); } else { slidingMenu.showMenu(); btn.setText("关闭"); } } public void onclicRight(View view) { Button btn = (Button) view; //右手侧滑栏是打开的 if (slidingMenu.isSecondaryMenuShowing()) { slidingMenu.showContent(); btn.setText("开启右边"); } else { slidingMenu.showSecondaryMenu(); btn.setText("关闭"); } }}
left_layout.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="#f0f" android:layout_height="match_parent"></LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.myapp2.MainActivity"> <Button android:onClick="onclicLeft" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开启左边" /> <Button android:onClick="onclicRight" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开启" /></RelativeLayout>
案例2Activity直接继承
LeftFragment
package qianfeng.com.slidingfragmentdemo;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class LeftFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_left, container, false); }}
MainActivity
package qianfeng.com.slidingfragmentdemo;import android.os.Bundle;import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;/** * 继承与 SlidingFragmentActivity * setBehindContentView() 将该方法设置的布局 中的ViewGroup 作为一个容器 * 用来承载 Fragment * * 实例化SlidingMenu 的时候 是通过get方式获取 * * 最后 将 Fragment 添加到容器中 */public class MainActivity extends SlidingFragmentActivity { private SlidingMenu slidingMenu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setBehindContentView(R.layout.left_menu_layout); // 继承 SlidingFragmentMenu 方法之后 可以直接使用Get方法 获取 slidingMenu对象 slidingMenu = getSlidingMenu(); slidingMenu.setMode(SlidingMenu.RIGHT);// slidingMenu.setSecondaryMenu(R.layout.layout); slidingMenu.setBehindOffset(300); slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); getSupportFragmentManager().beginTransaction().add(R.id.container, new LeftFragment()).commit(); }}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="qianfeng.com.slidingfragmentdemo.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /></RelativeLayout>
fragment_left.xml
<FrameLayout 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" android:background="@color/colorAccent" tools:context="qianfeng.com.slidingfragmentdemo.LeftFragment"> <!-- TODO: Update blank fragment layout --> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_blank_fragment" /></FrameLayout>
layout.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="#f0f" android:layout_height="match_parent"></LinearLayout>
left_menu_layout.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"></LinearLayout>
- 安卓高级4 第三方库SlidingMenu的使用
- 第三方库SlidingMenu的使用
- SlidingMenu这样使用Android Studio结构的第三方库
- SlidingMenu这样使用Android Studio结构的第三方库
- 导入第三方库,SlidingMenu
- 针对像SlidingMenu这样使用Android Studio结构的第三方库
- 安卓第三方沉浸式的使用
- Android Studio导入基于Eclipse的第三方库(SlidingMenu)
- 安卓简单的SlidingMenu使用抽屉
- 【安卓学习之第三方库】库的使用1-起始篇
- 【安卓学习之第三方库】库的使用3-不能访问资源ID问题
- AndroidStudio导入第三方库SlidingMenu错误
- 导入第三方依赖库slidingmenu
- 安卓添加第三方库的方法
- 安卓常用的开源第三方库
- 安卓常用的第三方框架
- 超轻量级的安卓SlidingMenu库
- 安卓导入第三方源码库
- SystemUI启动流程
- pods symbol(s) not found for architecture XXX
- 图解集合6:LinkedHashMap
- canalserver1.0.22基于mariadb10.1.14的HA功能bug
- 根目录磁盘空间不足
- 安卓高级4 第三方库SlidingMenu的使用
- 54. Cache-Control
- Java线程安全和非线程安全
- JavaScript地区选择
- 通过七牛云扫描我的网站
- 第5章:基于zookeeper的分布式锁实现
- 桶排序简单应用
- 算法-第四版-练习1.3.16解答
- ionic之切换开关