SlidingMenu在开发手机APP中经常有个人信息或者其他功能需要用到侧滑菜单。今天就来讲下开源的SlidingMenu的具体用法。下面只介绍了一种最简单的侧滑,也就是类似于QQ6.01版本的侧滑功能。本篇博文除了介绍开源SlidingMenu的用法,还介绍了一些Fragment的简单用法,适用于新手,希望仔细看看。看完不明白还有源码提供下载。
先附一张做好的效果图。
1.首先新建工程,给MainActivity定义布局。下面是我的布局,布局名称叫做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" 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="com.example.slidingmenu.MainActivity" > <TextView android:id="@+id/helloWorld" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/grzxry" android:layout_below="@id/helloWorld" android:layout_marginTop="20dp" /> </RelativeLayout>
这主要是一个MainActivity的布局,在主Activity中引入就是。一般要用到用到侧滑菜单的话通常都是弹出一个Fragment ,这也及时我为什么开头说的要简单介绍Fragment的用法了。下面再新建一个Fragment的布局。起名叫做:usr_fragment
<?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" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="helloWord" /> </LinearLayout>
/** * *项目名:SlidingMenu *包名:com.example.slidingmenu *文件名:UserFragment.java *版本信息: *日期:2015年12月9日-上午10:01:31 *Copyright (c)2015 * */ package com.example.slidingmenu; 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.TextView; /** * *类描述:侧滑界面 *@version 2015年12月9日 *@see (需要参见的其它类) *@since(从产品的那一个版本,此类被添加进来。(可选)) *@deprecated(该类从产品的那一个版本后,已经被其它类替换。(可选)) */ public class UserFragment extends Fragment{ public View view; private TextView tv; /*(non-Javadoc) * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub view = inflater.inflate(R.layout.usr_fragment, null); tv = (TextView)view.findViewById(R.id.tv); tv.setText("侧滑界面"); return view; } }
package com.example.slidingmenu; import android.content.Context; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.slidingmenu.lib.SlidingMenu; /** * * * 类描述:侧滑 * * @version 2015年12月9日 * @see (需要参见的其它类) * @since(从产品的那一个版本,此类被添加进来。(可选)) * @deprecated(该类从产品的那一个版本后,已经被其它类替换。(可选)) */ public class MainActivity extends FragmentActivity implements OnClickListener { private Button btn; private Context mContext; private SlidingMenu menu; private FragmentManager fragmentManager; private FragmentTransaction transaction; private UserFragment userFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(this); fragmentManager = getSupportFragmentManager(); transaction = fragmentManager.beginTransaction(); showSideslip(); } /** * 侧滑的方法 * * @param 参数说明 * @return 返回类型 * @exception 异常描述 * @see 需要参见的其它内容 * @since 从类的哪一个版本,此方法被添加进来。(可选) * @deprecated该方法从类的那一个版本后,已经被其它方法替换。(可选) */ private void showSideslip() { // TODO Auto-generated method stub // 初始化SlidingMenu menu = new SlidingMenu(this); // 设置滑动方式 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); menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); menu.setMenu(R.layout.menu_main_left); if (userFragment == null) { userFragment = new UserFragment(); transaction.add(R.id.user_frame, userFragment); transaction.commit(); } } /* * (non-Javadoc) * * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btn: menu.showMenu(); break; default: break; } } }
3.下面再拓展一些Fragment的基本用法。
Fragment家族常用的API
Fragment常用的三个类:
android.app.Fragment 主要用于定义Fragment
android.app.FragmentManager 主要用于在Activity中操作Fragment
android.app.FragmentTransaction 保证一些列Fragment操作的原子性,熟悉事务这个词,一定能明白~
a、获取FragmentManage的方式:
getFragmentManager() // v4中,getSupportFragmentManager
b、主要的操作都是FragmentTransaction的方法
FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务
transaction.add()
往Activity中添加一个Fragment
transaction.remove()
从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。
transaction.replace()
使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~
transaction.hide()
隐藏当前的Fragment,仅仅是设为不可见,并不会销毁
transaction.show()
显示之前隐藏的Fragment
到此这些基本的功能就都有了,匆忙之中写的博客肯定有一些不合理以及不合适的地方,如果还有什么不懂可以在评论中提出来,我会一一作答。
Demo链接,点击下载