Android——SlidingMenu学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android——SlidingMenu学习总结相关的知识,希望对你有一定的参考价值。

来源

SlidingMenu是github上比較火开源库。很强大,不但但是简单的设置实现两側滑动菜单,还能够设置菜单的阴影、渐变色、划动模式等。

下载地址:https://github.com/jfeinstein10/SlidingMenu


怎样使用

要想可以实现SlidingMenu的效果,首先必需要将它作为libary导入到你的project。

注意slidingMenu_library类库本身自带了android-support-v4.jar文件,而我们自己的project一般也带有这个文件,假设两个文件的SHA-1值不一样,可能会出现

           找不到类的异常。我的做法是删除掉自己项目里面的android-support-v4.jar。


技术分享技术分享



API演示样例代码

package com.example.slidingmenu_left;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Window;

import com.example.slidingmenu_left.fragment.MenuFragment;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;

public class MainActivity extends SlidingFragmentActivity {
	
	private SlidingMenu slidingMenu;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		
		// 内容页布局
		setContentView(R.layout.content);
		
		// 设置側拉条目布局
		setBehindContentView(R.layout.menu_frame);
		
		// 获取側拉栏目对象
		slidingMenu = getSlidingMenu();
		
		/*
		 * SlidingMenu.TOUCHMODE_FULLSCREEN  全屏触摸拖拽有效
		 * SlidingMenu.TOUCHMODE_MARGIN      拖拽边缘有效
		 * SlidingMenu.TOUCHMODE_NONE        全屏不响应触摸拖拽事件
		 */
		slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
		
		// 设置内容显示页相应的dp大小
		slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
		
//		// 设置左側側拉栏目的dp大小
//		slidingMenu.setBehindWidthRes(140);// 注意这里面140的单位是像素
		
		/*
		 * SlidingMenu.LEFT
		 * SlidingMenu.RIGHT
		 * SlidingMenu.LEFT_RIGHT
		 */
		// 设置側拉栏目的位置
		slidingMenu.setMode(SlidingMenu.LEFT);
		
		// 给側拉栏目和右側内容页区分开(竖线)
		slidingMenu.setShadowDrawable(R.drawable.shadow);
		
		// 设置(竖线)的宽度
		slidingMenu.setShadowWidthRes(R.dimen.shadow_width);
		
		// fragment去替换布局中节点
		Fragment fragment = new MenuFragment();
		getSupportFragmentManager().beginTransaction()// 开启事务
					   .replace(R.id.menu, fragment, "MENU")//替换布局
					   .commit();// 提交事务
		
	}

	/**
	 * 当前类中做替换当前显示内容界面的操作
	 * @author wuseyukui
	 *
	 * @param fragment
	 */
	public void switchFragment(Fragment fragment) {
		if (fragment != null) {
			getSupportFragmentManager().beginTransaction()
			   			   .replace(R.id.content_frame, fragment, "CONTENT")
						   .commit();
						   slidingMenu.toggle();
		}
	}

}

package com.example.slidingmenu_left.fragment;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.example.slidingmenu_left.MainActivity;
import com.example.slidingmenu_left.R;

public class MenuFragment extends Fragment {
	
	private String tag = "MenuFragment";
	private View view;

	/**
	 * 创建对象
	 */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.i(tag , "=====onCreate");
	}
	
	/**
	 * 相似:setContentView
	 * 设置布局
	 */
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		Log.i(tag , "=====onCreateView");
		view = View.inflate(getActivity(), R.layout.list_view, null);
		return view;
	}
	
	/**
	 * 数据填充操作
	 */
	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		Log.i(tag , "=====onActivityCreated");
		ListView listView = (ListView)view.findViewById(R.id.list_view);
		listView.setAdapter(new ArrayAdapter<String>(getActivity(), 
				android.R.layout.simple_list_item_1, 
				android.R.id.text1, 
				initData()));
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Fragment fragment = null;
				switch (position) {
				case 0:
					fragment = new Fragment1();
					break;
				case 1:
					fragment = new Fragment2();
					break;
				case 2:
					fragment = new Fragment3();
					break;
				case 3:
					fragment = new Fragment4();
					break;
				case 4:
					fragment = new Fragment5();
					break;
				default:
					break;
				}
				
				swithFragment(fragment);
			}
		});
	}
	
	private void swithFragment(Fragment fragment) {
		if (getActivity() instanceof MainActivity) {
			((MainActivity)getActivity()).switchFragment(fragment);
		}
	}

	private List<String> initData() {
		ArrayList<String> arrayList = new ArrayList<String>();
		arrayList.add("栏目1");
		arrayList.add("栏目2");
		arrayList.add("栏目3");
		arrayList.add("栏目4");
		arrayList.add("栏目5");
		return arrayList;
	}
}

效果图:
技术分享











以上是关于Android——SlidingMenu学习总结的主要内容,如果未能解决你的问题,请参考以下文章

Android中的slidingmenu

使用SlidingMenu的方法以及Android Studio 如何导入第三方库SlidingMenu

Android SlidingMenu使用详解

SlidingMenu 库和 Android Navigation Drawer 有啥区别?

AS中导入GitHub开源项目SlidingMenu总结,此方法有效,但是太耗时间。 「我用了半个多小时」

Android SlidingMenu 使用详解