总结下抽屉的使用,记录使用方法,方便以后查看
使用SlidingMenu
SlidingMenu是一个开源的侧滑菜单(https://github.com/jfeinstein10/SlidingMenu)。 为大家的安卓程序提供侧滑菜单,这个功能也非常有用。
下载项目到本地放到项目中,然后添加到项目中进行依赖
SlidingMenu样式的抽屉,主要使用了MainActivity(1,2,3)这三个类来实现,其中第三个主页为ViewPager,左右抽屉使用FrameLayout进行加载,左抽屉在Fragment中实现点击之后关闭抽屉
代码如下:
方法一:
MainActivity.class
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
slidingMenu = new SlidingMenu(this);
slidingMenu.setMode(SlidingMenu.LEFT);
// 设置侧滑栏完全展开之后,距离另外一边的距离,单位px,设置的越大,侧滑栏的宽度越小
slidingMenu.setBehindOffsetRes(R.dimen.sliding_menu_offset);
// 设置触摸模式,可以选择全屏划出,或者是边缘划出,或者是不可划出
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
slidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
// 设置阴影的宽度
slidingMenu.setShadowWidth(0);
// 设置阴影的颜色
slidingMenu.setShadowDrawable(R.color.abs__background_holo_dark);
// 设置侧滑栏完全展开之后,距离另外一边的距离,单位px,设置的越大,侧滑栏的宽度越小
slidingMenu.setBehindOffset(100);
// 设置渐变的程度,范围是0-1.0f,设置的越大,则在侧滑栏刚划出的时候,颜色就越暗。1.0f的时候,颜色为全黑
slidingMenu.setFadeDegree(0f);
//设置侧滑剩余的位置添加阴影淡入淡出
slidingMenu.setOffsetFadeDegree(0.5f);
slidingMenu.setMenu(R.layout.slidingmenu);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d("CARLOZ", "keyCode = " + keyCode);
switch (keyCode) {
case KeyEvent.KEYCODE_MENU:
slidingMenu.toggle(true);
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
private SlidingMenu slidingMenu;
}
方法二:
MainActivity2.class
//将SlidingMenu当作普通控件
public class MainActivity2 extends Activity {
private SlidingMenu mLeftMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
mLeftMenu = (SlidingMenu) findViewById(R.id.sliding_main2);
// configure the SlidingMenu
// SlidingMenu menu = new SlidingMenu(this);
mLeftMenu.setMode(SlidingMenu.LEFT);
// 设置触摸屏幕的模式
// 设置阴影的宽度
mLeftMenu.setShadowWidth(0);
// 设置侧滑栏完全展开之后,距离另外一边的距离,单位px,设置的越大,侧滑栏的宽度越小
mLeftMenu.setBehindOffset(100);
// 设置渐变的程度,范围是0-1.0f,设置的越大,则在侧滑栏刚划出的时候,颜色就越暗。1.0f的时候,颜色为全黑
mLeftMenu.setFadeDegree(0f);
//设置侧滑剩余的位置添加阴影淡入淡出
mLeftMenu.setOffsetFadeDegree(0.5f);
mLeftMenu.setShadowWidthRes(R.dimen.sliding_menu_offset);
// mLeftMenu.setShadowDrawable(R.color.abs__background_holo_dark);
mLeftMenu.setMenu(R.layout.slidingmenu);
mLeftMenu.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (mLeftMenu.isMenuShowing())
mLeftMenu.toggle();
}
});
}
}
方法三:
public class MainActivity3 extends SlidingFragmentActivity{
private ViewPager viewpager;
private FragmentPagerAdapter mAdapter;
private List<Fragment> fList;
private SlidingMenu menu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
viewpager=(ViewPager) findViewById(R.id.viewpager);
fList=new ArrayList<Fragment>();
MainFragment1 fragment1=new MainFragment1();
MainFragment1 fragment2=new MainFragment1();
MainFragment1 fragment3=new MainFragment1();
fList.add(fragment1);
fList.add(fragment2);
fList.add(fragment3);
mAdapter=new SligingFragmentAdapter(getSupportFragmentManager(), fList);
viewpager.setAdapter(mAdapter);
//重点来了 左边的抽屉哦
MainFragment2 mFragment1=new MainFragment2();
setBehindContentView(R.layout.fragment_left);
getSupportFragmentManager().beginTransaction().replace(R.id.frament_left, mFragment1).commit();
menu = getSlidingMenu();
//设置侧滑菜单的位置,可选值LEFT , RIGHT , LEFT_RIGHT (两边都有菜单时设置)
menu.setMode(SlidingMenu.LEFT_RIGHT);
// 设置触摸屏幕的模式
// 设置触摸屏幕的模式,可选只MARGIN , CONTENT //全屏支持触摸拖拉
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
menu.setShadowWidthRes(R.dimen.sliding_menu_offset);
//滑动显示的背景颜色
// menu.setShadowDrawable(android.R.color.black);
// 设置滑动菜单视图的宽度
menu.setBehindOffsetRes(R.dimen.sliding_menu_offset);
// 设置渐入渐出效果的值
menu.setFadeDegree(0.35f);
//设置侧滑剩余的位置添加阴影淡入淡出
menu.setOffsetFadeDegree(0.5f);
//设置SlidingMenu与下方视图的移动的速度比,当为1时同时移动,取值0-1
menu.setBehindScrollScale(1.0f);
//滑动显示的背景颜色
// menu.setSecondaryShadowDrawable(android.R.color.black);
menu.setBehindScrollScale(0f);
//设置actionBar能否跟随侧滑栏移动,如果没有,则可以去掉
setSlidingActionBarEnabled(false);
mFragment1.setMent(menu);//关闭左侧抽屉
//设置右边(二级)侧滑菜单
menu.setSecondaryMenu(R.layout.fragment_right);
Fragment rightMenuFragment = new MainFragment1();
getSupportFragmentManager().beginTransaction()
.replace(R.id.frament_right, rightMenuFragment).commit();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//重写了Menu监听,实现按下手机Menu键弹出和关闭侧滑菜单
if(keyCode==KeyEvent.KEYCODE_MENU){
menu.toggle();
}
return super.onKeyDown(keyCode, event);
}
public SlidingMenu SlidingMenuType(){
return menu;
}
}
SlidingMenu使用完毕,如此简单
使用Google自带的Drawerlayout实现
GoogleDrawerlayoutMain.class
public class GoogleDrawerlayoutMain extends FragmentActivity{
private FrameLayout frameLayout;
private DrawerLayout drawer;
private MainFragment1 frament_left;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.google_drawer);
drawer= (DrawerLayout) findViewById(R.id.drawer);
Toast.makeText(this,"什么情况",Toast.LENGTH_SHORT).show();
frameLayout= (FrameLayout) findViewById(R.id.google_fl);
Fragment fragment=new MainFragment1();
getSupportFragmentManager().beginTransaction().replace(R.id.google_fl,fragment).commit();
//这种写法适用于FrameLayout 以指定Fragment
frament_left=(MainFragment1)getSupportFragmentManager().findFragmentById(R.id.frament_left);
frament_left.setDrawer(drawer);//设置关闭抽屉
}
}
SligingFragmentAdapter.class
public class SligingFragmentAdapter extends FragmentPagerAdapter{
private List<Fragment> fList;
public SligingFragmentAdapter(FragmentManager fm,List<Fragment> fList) {
super(fm);
this.fList=fList;
}
@Override
public Fragment getItem(int arg0) {
Bundle bundle = new Bundle();
bundle.putInt("q",arg0);
Fragment fragment=new Fragment();
fragment.setArguments(bundle);
return fList.get(arg0);
}
@Override
public int getCount() {
return fList==null?0:fList.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
@Override
public int getItemPosition(Object object) {
//用以返回给定对象的位置,如果该函数不被重载,则会一直返回 POSITION_UNCHANGED,
// 从而导致 ViewPager.dataSetChanged() 被调用时,
// 认为不必触发 PagerAdapter.instantiateItem()。很多人因为没有重载该函数,而导致调用
//PagerAdapter.notifyDataSetChanged() 后,什么都没有发生。
return POSITION_NONE;
}
}
MainFragment1.class
public class MainFragment1 extends Fragment{
private DrawerLayout drawer;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.activity_main, null);
view.findViewById(R.id.text).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(),"点击没有啊",Toast.LENGTH_SHORT).show();
Intent intent=new Intent(getContext(),GoogleDrawerlayoutMain.class);
startActivity(intent);
if (drawer!=null){
drawer.closeDrawer(Gravity.START);
}
}
});
return view;
}
public void setDrawer(DrawerLayout drawer){
this.drawer=drawer;
}
}
MainFragment2.class
public class MainFragment2 extends Fragment{
SlidingMenu menu;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.activity_main, null);
view.findViewById(R.id.text).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(),"什么情况点击没有啊",Toast.LENGTH_SHORT).show();
Intent intent=new Intent(getContext(),GoogleDrawerlayoutMain.class);
startActivity(intent);
menu.toggle();
}
});
return view;
}
public void setMent(SlidingMenu menu){
this.menu=menu;
}
}
好了全部完成