• 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)


            在做谷歌电子市场的时候用的是DrawerLayout实现的抽屉效果,在新闻客户端的时候用的是开源框架SlidingMenu来实现的,总的来说,各有个的优点,侧滑(开源框架)实现的效果更好,但是DrawerLayout直接写布局文件就好了,不过我还是比较喜欢用开源框架的这个安静。下面分别来说说如何实现:

    1、SlidingMenu

     首先要引入SlidingMenu的库文件的类库,不能直接导入jar包。然后 Activity继承SlidingFragmentActivity。其次,将onCreate方法改为public。

    在主界面中添加如下代码:

    //调用api
    
    			setBehindContentView(R.layout.left_menu);// 设置侧边栏布局
    
    			SlidingMenu slidingMenu = getSlidingMenu();// 获取侧边栏对象
    			slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);// 设置全屏触摸
    	
    			slidingMenu.setSecondaryMenu(R.layout.right_menu);// 设置右侧边栏
    			slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);// 设置展现模式
    	
    			slidingMenu.setBehindOffset(100);// 设置预留屏幕的宽度



    在BasePager.java中添加如下代码。

    /**
    	 * 切换SlidingMenu的状态
    	 * 
    	 * @param b
    	 */
    	protected void toggleSlidingMenu() {
    		MainActivity mainUi = (MainActivity) mActivity;
    		SlidingMenu slidingMenu = mainUi.getSlidingMenu();
    		slidingMenu.toggle();// 切换状态, 显示时隐藏, 隐藏时显示
    	}
    
    	/**
    	 * 初始化数据
    	 */
    	public void initData() {
    
    	}
    
    	/**
    	 * 设置侧边栏开启或关闭
    	 * 
    	 * @param enable
    	 */
    	public void setSlidingMenuEnable(boolean enable) {
    		MainActivity mainUi = (MainActivity) mActivity;
    
    		SlidingMenu slidingMenu = mainUi.getSlidingMenu();
    
    		if (enable) {
    			slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    		} else {
    			slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
    		}
    	}
    每个子界面都可以用到如下的代码:

    public class SettingPager extends BasePager {
    
    	public SettingPager(Activity activity) {
    		super(activity);
    	}
    
    	@Override
    	public void initData() {
    		//System.out.println("初始化设置数据....");
    		
    		tvTitle.setText("设置");
    		btnMenu.setVisibility(View.GONE);// 隐藏菜单按钮
    		setSlidingMenuEnable(false);// 关闭侧边栏
    
    		TextView text = new TextView(mActivity);
    		text.setText("设置");
    		text.setTextColor(Color.RED);
    		text.setTextSize(25);
    		text.setGravity(Gravity.CENTER);
    
    		// 向FrameLayout中动态添加布局
    		flContent.addView(text);
    	}
    
    }




    二、DrawerLayout

    直接在布局文件中这样写:

    <android.support.v4.widget.DrawerLayout 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"
    	    tools:context=".MainActivity" 
    	    android:id="@+id/dl">
    	
    	    <LinearLayout
    	        android:layout_width="match_parent"
    	        android:layout_height="match_parent"
    	        android:layout_centerHorizontal="true"
    	        android:layout_centerVertical="true"
    	       />
    	
    	    <FrameLayout android:layout_width="match_parent"
    	        android:layout_height="match_parent"
    	        android:background="@drawable/bg_tab"
    	        android:layout_gravity="left">
    	        
    	    </FrameLayout>
    	</android.support.v4.widget.DrawerLayout>
    然后再主页面中添加:

    控制抽屉的开关, 显示在actionBar 上面 

    public class MainActivity extends BaseActivity implements
    		OnQueryTextListener {
    	private DrawerLayout mDrawerLayout;
    	private ActionBarDrawerToggle drawerToggle;
    	private ViewPager mViewPager;
    	private PagerTabStrip pager_tab_strip;
    	private String[] tab_names;  // 标签的名字
    	@Override
    	protected void initActionBar() {
    		ActionBar actionBar = getSupportActionBar();
    		actionBar.setDisplayHomeAsUpEnabled(true);
    		actionBar.setHomeButtonEnabled(true);
    		/*
    		 *	1)显示Navigation Drawer的 Activity 对象
    			2) DrawerLayout 对象
    			3)一个用来指示Navigation Drawer的 drawable资源
    			4)一个用来描述打开Navigation Drawer的文本 (用于支持可访问性)。
    			5)一个用来描述关闭Navigation Drawer的文本(用于支持可访问性). 
    		 */
    		drawerToggle = new ActionBarDrawerToggle(this,
    				mDrawerLayout, R.drawable.ic_drawer_am, R.string.open_drawer,
    				R.string.close_drawer){
    
    					@Override
    					public void onDrawerClosed(View drawerView) {
    						super.onDrawerClosed(drawerView);
    						Toast.makeText(getApplicationContext(), "抽屉关闭了", 0).show();
    					}
    					@Override
    					public void onDrawerOpened(View drawerView) {
    						super.onDrawerOpened(drawerView);
    						Toast.makeText(getApplicationContext(), "抽屉打开了", 0).show();
    					}
    			
    		};
    		mDrawerLayout.setDrawerListener(drawerToggle);
    		//  让开关和actionbar建立关系 
    		drawerToggle.syncState();
    		
    	}
    }





  • 相关阅读:
    小程序双重for循环实现tab切换小demo
    小程序基础操作小总结
    一道关于类型转换的面试题的研究
    面试准备(6)vue专题
    面试准备(5)一道关于循环,事件执行顺序的题进行剖析
    微信小程序弹出授权用户信息和手机号
    面试准备(4) 作用域 预解析 字面量 arguments 等考察点练习
    ABC135
    CodeForces 1288C
    P4170
  • 原文地址:https://www.cnblogs.com/sdksdk0/p/5585115.html
Copyright © 2020-2023  润新知