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>
布局建好之后来新建一个Fragment的类,起名叫做:UserFragment 继承Fragment类。
/**
*
*项目名: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;
}
}
2.接下来就是主要的时候了,在MainActivity中集成SlidingMenu的用法以及创建Fragment和跳转。
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;
}
}
}
可以看到上面代码包含了SlidingMenu的用法以及Fragment简单的用法。注释也写的很详细,可以看看。不明白一会在下面给出Demo的链接,自己自行下载。
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
到此这些基本的功能就都有了,匆忙之中写的博客肯定有一些不合理以及不合适的地方,如果还有什么不懂可以在评论中提出来,我会一一作答。