Android SlidingMenu 使用详解

本文详细介绍了如何在Android中使用SlidingMenu,包括通过继承SlidingActivity、作为普通控件以及设置左右侧滑菜单的实例。示例代码展示了SlidingMenu的配置和使用方法,适用于希望实现侧滑菜单功能的开发者。

是不是特别简单几行代码搞定哈~

2、通过把Activity继承SlidingActivity

a、继承SlidingActivity

b、然后在onCreate中setBehindContentView(R.layout.leftmenu); 设置侧滑菜单的布局

c、通过getSlidingMenu()得到SlidingMenu对象,然后设置样式

package com.zhy.zhy_slidemenu_demo02;

import android.os.Bundle;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;

import com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity;

public class MainActivity extends SlidingActivity

{

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

setBehindContentView(R.layout.leftmenu);

// configure the SlidingMenu

SlidingMenu menu = getSlidingMenu();

menu.setMode(SlidingMenu.LEFT);

// 设置触摸屏幕的模式

menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

menu.setShadowWidthRes(R.dimen.shadow_width);

menu.setShadowDrawable(R.drawable.shadow);

// 设置滑动菜单视图的宽度

menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);

// 设置渐入渐出效果的值

menu.setFadeDegree(0.35f);

/**

  • SLIDING_WINDOW will include the Title/ActionBar in the content

  • section of the SlidingMenu, while SLIDING_CONTENT does not.

*/

// menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);

// menu.setMenu(R.layout.leftmenu);

}

}

效果图和第一种方式一样是不是也很简单~

3、将SlidingMenu当作普通控件

可以把SlidingMenu作为普通的view,然后在布局中声明,丧心病狂的玩~下面看个例子:

<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:tools=“http://schemas.android.com/tools”

android:id=“@+id/id_main_ly”

android:layout_width=“match_parent”

android:layout_height=“match_parent” >

<LinearLayout

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_marginLeft=“30dp”

android:layout_marginTop=“30dp” >

<com.jeremyfeinstein.slidingmenu.lib.SlidingMenu

xmlns:sliding=“http://schemas.android.com/apk/res-auto”

android:id=“@+id/slidingmenulayout”

android:layout_width=“120dp”

android:layout_height=“170dp”

android:background=“#ffffffff”

sliding:behindOffset=“0dp”

sliding:behindScrollScale=“1”

sliding:fadeDegree=“0.3”

sliding:fadeEnabled=“true”

sliding:touchModeAbove=“fullscreen”

sliding:viewAbove=“@layout/pic” />

我们SlidingMenu作为普通View在布局文件中设置了布局,并且设置了viewAbove的值为另一个布局。

下面看pic布局:

<?xml version="1.0" encoding="utf-8"?>

<ImageView xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“120dp”

android:layout_height=“170dp”

android:src=“@drawable/zhy” />

就是一张妹子图片。

最后看主Activity:

package com.zhy.zhy_slidemenu_demo03;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;

public class MainActivity extends Activity

{

private SlidingMenu mLeftMenu;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mLeftMenu = (SlidingMenu) findViewById(R.id.slidingmenulayout);

// configure the SlidingMenu

// SlidingMenu menu = new SlidingMenu(this);

mLeftMenu.setMode(SlidingMenu.LEFT);

// 设置触摸屏幕的模式

mLeftMenu.setShadowWidthRes(R.dimen.shadow_width);

mLeftMenu.setShadowDrawable(R.drawable.shadow);

mLeftMenu.setMenu(R.layout.leftmenu);

mLeftMenu.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View v)

{

if (mLeftMenu.isMenuShowing())

mLeftMenu.toggle();

}

});

// 设置滑动菜单视图的宽度

// 设置渐入渐出效果的值

/**

  • SLIDING_WINDOW will include the Title/ActionBar in the content

  • section of the SlidingMenu, while SLIDING_CONTENT does not.

*/

}

}

效果图:

通过SlidingMenu给图片设置一个滑动展示介绍,你也可以滑动显示任何东西,下载、分享按钮什么的。图片很多的时候不知道效率咋样,可以这么玩,但是不建议哈~

4、SlidingMenu设置左右侧滑菜单例子

上面介绍的3个方法,SlidingMenu的布局中控件的事件都需要写在Activity中,这样代码比较臃肿,一般会使用Fragment作为侧滑菜单的布局容器。

核心代码:

Fragment leftMenuFragment = new MenuLeftFragment();

setBehindContentView(R.layout.left_menu_frame);

getSupportFragmentManager().beginTransaction()

.replace(R.id.id_left_menu_frame, leftMenuFragment).commit();

SlidingMenu menu = getSlidingMenu();

menu.setMode(SlidingMenu.LEFT_RIGHT);

// 设置触摸屏幕的模式

menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);

先给侧滑菜单通过 setBehindContentView(R.layout.left_menu_frame);设置一个布局,此布局中只有一个FrameLayout,然后使用FragmentManager将Fragment替换掉此Fragment,这样这个Fragment就作为我们侧滑菜单的布局了,我们的事件处理代码也可以写在Fragement中,而不是Activity中。

下面看具体例子:

首先分别是左右两边的两个Fragment:

MenuLeftFragment

package com.zhy.zhy_slidemenu_demo04;

import java.util.Arrays;

import java.util.List;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.ListAdapter;

import android.widget.ListView;

public class MenuLeftFragment extends Fragment

{

private View mView;

private ListView mCategories;

private List 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(getActivity(),

android.R.layout.simple_list_item_1, mDatas);

mCategories.setAdapter(mAdapter);

}

}

左边的侧滑布局就是一个ListView,代码比较简单~

MenuRightFragment

package com.zhy.zhy_slidemenu_demo04;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

public class MenuRightFragment extends Fragment

{

private View mView;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState)

{

if(mView == null)

{

mView = inflater.inflate(R.layout.right_menu, container, false);

}

return mView ;

}

}

右边的侧滑菜单的Fragment,加载了一个布局,没有做任何事件处理~

最后是MainActivity

package com.zhy.zhy_slidemenu_demo04;

import java.util.ArrayList;

import java.util.List;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentPagerAdapter;

import android.support.v4.view.ViewPager;

import android.view.View;

import android.view.Window;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;

import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;

public class MainActivity extends SlidingFragmentActivity

{

private ViewPager mViewPager;

private FragmentPagerAdapter mAdapter;

private List mFragments = new ArrayList();

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

// 初始化SlideMenu

initRightMenu();

// 初始化ViewPager

initViewPager();

}

private void initViewPager()

{

mViewPager = (ViewPager) findViewById(R.id.id_viewpager);

MainTab01 tab01 = new MainTab01();

MainTab02 tab02 = new MainTab02();

MainTab03 tab03 = new MainTab03();

mFragments.add(tab01);

mFragments.add(tab02);

mFragments.add(tab03);

/**

  • 初始化Adapter

*/

mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())

{

@Override

public int getCount()

{

return mFragments.size();

}

@Override

public Fragment getItem(int arg0)

{

return mFragments.get(arg0);

}

};

mViewPager.setAdapter(mAdapter);

}

private void initRightMenu()

{

Fragment leftMenuFragment = new MenuLeftFragment();

setBehindContentView(R.layout.left_menu_frame);

getSupportFragmentManager().beginTransaction()

.replace(R.id.id_left_menu_frame, leftMenuFragment).commit();

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

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

【Android高级架构视频学习资源】

Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

[外链图片转存中…(img-7YuWIYjX-1713724455493)]

总结

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
[外链图片转存中…(img-7Sv6SROt-1713724455494)]

【Android高级架构视频学习资源】

Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

slidingmenu包含slidingmenuDemo跟两个slidingmenu_lib,slidingmenu_actionbar,直接可以用。slidingmenu_lib是开源项目ActionBarSherlock-master的library类库,slidingmenu_actionbar是开源项目ActionBarSherlock-master的actionbarsherlock类库,只是重命名了,slidingmenuDemo是开源项目ActionBarSherlock-maste的Example。注意:(已修改) 1.可能报找不到getSupportActionBar等ActionBarSherLock的方法。原因是使用ActionBarSherLock的Activity需继承于SherlockActivity,修改SlidingMenu liberary(slidingmenu_lib)中的 SlidingFragmentActivity,让它继承于SherlockFragmentActivity,重新编译liberary导入。 2.项目红叉或红叹号,删除support_v4包,ActionBarSherLock(slidingmenu_actionbar)已包含此包,会冲突。也有可能是主题问题,注意appication theme是否正确,参照exsample。 3.注意把ActionBar、某些Fragment等替换成ActionBarSherLock包中的类。 SlidingMenu依赖ActionBarSherlock。可以去官网下载最新的ActionBarSherlock。在导入的时候SlidingMenu-master/library中的 SlidingActivity.java、SlidingFragmentActivity.java SlidingPreferenceActivity.java三个文件作如下修改就好了。 SlidingActivity extends Activity SlidingFragmentActivity extends FragmentActivity SlidingPreferenceActivity extends PreferenceActivity 分别替换成 SlidingActivity extends SherlockActivity SlidingFragmentActivity extends SherlockFragmentActivity SlidingPreferenceActivity extends SherlockPreferenceActivity
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值