安卓高级4 第三方库SlidingMenu的使用

时间:2021-05-05 22:10:12

源码位于github上(本人fork地址):点击进入地址

效果图:安卓高级4 第三方库SlidingMenu的使用

  1. 使用方法:下载源码后 解压其中的文件夹library 到任意地方
  2. 修改library中gragle 其方法参考另一个博客(建议先修改后倒入studio)此参考链接中是先导入我个人不推荐可能出什么问题

    具体参考
  3. 将linbrary导入到studio
  4. 新建项目添加依赖

    安卓高级4 第三方库SlidingMenu的使用

参考手册:

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);


案例

 文件结构:

安卓高级4 第三方库SlidingMenu的使用

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直接继承

安卓高级4 第三方库SlidingMenu的使用

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>