您的位置:首页 > 其它

侧滑菜单——SlidingMenu的使用

2016-11-17 14:43 288 查看
1、添加SlidingMenu library

2、添加侧拉菜单 //1.将activity改为继承SlidingFragmentActivity,这样activity才能去管理侧拉菜单
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);

//添加侧拉菜单slidingmenu
//2.添加侧拉菜单
//2.1获取侧拉菜单
slidingMenu = getSlidingMenu();
//2.2设置侧拉菜单的布局
setBehindContentView(R.layout.menu);
//2.3设置侧拉的方向
//LEFT : 左边
//LEFT_RIGHT : 左右
//RIGHT : 右边
slidingMenu.setMode(SlidingMenu.LEFT);
//2.4设置侧拉菜单或者内容页的显示宽度
//设置侧拉菜单宽度
//slidingMenu.setBehindWidth(220);//i 表示像素
//slidingMenu.setBehindWidthRes(res);//res 在dimens.xml文件设置宽度
//设置内容页的宽度
//lidingMenu.setBehindOffset(i);//i表示是内容页宽度
slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_content_width);
//2.5设置侧拉菜单分割线
//设置分割线的样式
slidingMenu.setShadowDrawable(R.drawable.shadow);
//设置分割线的宽度
//slidingMenu.setShadowWidth(pixels);//pixels:分割线的宽度
slidingMenu.setShadowWidthRes(R.dimen.slidingmenu_shadow_width);//resid:表示dimens.xml设置的参数
//2.6设置滑动范围
//TOUCHMODE_FULLSCREEN : 全屏触摸
//TOUCHMODE_MARGIN : 分隔线触摸
//TOUCHMODE_NONE : 不允许触摸
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
}
}
3、设置侧拉菜单布局

(1)创建一个MenuFragment的布局文件 menu_left<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView>

</LinearLayout>

(2)2.初始化控件,并设置相应的adapter
//设置fragment布局样式
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
//	TextView textView = new TextView(getActivity());
//	textView.setText("侧拉菜单");
//将布局文件转化成view对象
View view = View.inflate(getActivity(), R.layout.menu_left, null);
lv = (ListView) view.findViewById(R.id.lv);
//android.R.layout.simple_list_item_1 : android系统设置好的布局文件,其中就只有一个id为text1的textview
//android.R.id.text1 : 数据要填充的textivew的id
lv.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, initData()));
return view;
}

/**
* 设置listview填充数据
* @return
*/
private List<String> initData() {
List<String> list  = new ArrayList<String>();
list.add("Fragment0");
list.add("Fragment1");
list.add("Fragment2");
list.add("Fragment3");
list.add("Fragment4");
return list;
}

4、点击切换fragment

(1)给listview设置条目点击事件//给listview设置条目点击事件
lv.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
Log.i("JAVA","第"+position+"个条目被点击");
}
});
(2)创建各个fragment

//每个fragment中都要去显示布局,填充数据,相同的抽取到父类
public class Fragment0 extends BaseFragment {

}

(3)创建baseFragment,同时各fragemnt继承baseFragment
public class BaseFragment extends Fragment {

@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
//.getSimpleName() : 获取一个类的短类名,不包含包名的类型
//baseFragment = new Fragment0();  this : fragment0
textView.setText("baseFragment");
return textView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
}

}


(4)在条目点击事件中实现切换操作
//给listview设置条目点击事件
lv.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
Log.i("JAVA","第"+position+"个条目被点击");
//切换条目对应的fragment
//多态操作,父类引用中保存的子类对象
BaseFragment baseFragment = null;
switch (position) {
case 0:
//切换到fragment0
//1.获取fragment0
baseFragment = new Fragment0();
break;
case 1:
//切换到fragment1
//1.获取fragment0
baseFragment = new Fragment1();
break;
case 2:
//切换到fragment2
//1.获取fragment0
baseFragment = new Fragment2();
break;
case 3:
//切换到fragment3
//1.获取fragment0
baseFragment = new Fragment3();
break;
case 4:
//切换到fragment4
//1.获取fragment0
baseFragment = new Fragment4();
break;
}
//2.将fragment0填充到Mainactivity内容页中
switchFragment(baseFragment);
}
});

/**
* 切换fragment操作
* @param fragment0
*/
private void switchFragment(BaseFragment baseFragment) {
//2.1获取fragment管理者
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.content, baseFragment, "HOME").commit();
}


(5)修改baseFragment中数据显示方式
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
//.getSimpleName() : 获取一个类的短类名,不包含包名的类型
//baseFragment = new Fragment0();  this : fragment0
textView.setText(this.getClass().getSimpleName());
return textView;
}

5、将切换fragment操作移植到Mainactivity
(1)在MainActivity中创建切换fragment操作
/**
* 切换fragment操作
* @param baseFragment
*/
public void switchFragment(BaseFragment baseFragment) {
if (baseFragment!=null) {
getSupportFragmentManager()
.beginTransaction().replace(R.id.content, baseFragment, "HOME").commit();
}
}

(2)在MenuFragment中的切换fragment方法中调用
/**
* 切换fragment操作
* @param fragment0
*/
private void switchFragment(BaseFragment baseFragment) {
//2.1获取fragment管理者
/*getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.content, baseFragment, "HOME").commit();*/
//调用Mainactivity中的switchFragment
//1.判断getactivity是否是Mainactivity
if (getActivity() instanceof MainActivity) {
((MainActivity)getActivity()).switchFragment(baseFragment);
}
}

6、设置右侧滑菜单

(1)添加菜单//4.添加右侧滑菜单
//设置右侧滑菜单布局
slidingMenu.setSecondaryMenu(R.layout.right_menu);
//设置右侧滑菜单分割线
slidingMenu.setSecondaryShadowDrawable(R.drawable.shadow);
(2)设置侧拉方向

//2.3设置侧拉的方向
//LEFT : 左边
//LEFT_RIGHT : 左右
//RIGHT : 右边
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息