欢迎使用优快云-markdown编辑器

Android侧滑系列(1)---官方控件DrawerLayout

前言:最近在调研一个项目,就是在已经成型的app中加入侧滑效果。由于对这里一无所知,所以准备出一套系列。本篇先mark一下官方文档,然后后期再加上其他的git大神的第三方库,希望大家能够喜欢。
so,这是一篇android developer上的翻译文章。

  • 继承结构

  • 简介

  • 子类

  • 常量

  • 构造函数

  • 方法


继承结构

java这门语言的优点是“万物皆对象“,这也是我最喜欢java的一点。所以任何类,它的跟都是Object类。然后子类的view不难想到,再底下的viewgroup也是同样。作为一个android开发看到widget.xxxLayout,它能包含的属性能够一目了然,这应该是最基本的素质了吧。

java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.support.v4.widget.DrawerLayout

简介

DrawerLayout是一个允许用户可以从window纵向单侧或两侧滑入滑出的顶层容器。我们使用android:layout_gravity的属性left和right来控制Drawer的滑入和滑出的位置,start和end控制Drawer的布局方向。在使用控件时,每一个布局只能包含一个Drawer,否则会抛出runtime异常。在添加到布局中时,drawerlayout通常应该是根布局,然后注意它的width和height都要使用match_parent并且不能使用layout_gravity。然后在这个父布局中添加Drawer,这个里面一定要设置layout_gravity,它的height通常是match_parent,width就按照您的心情来,自己设定。
DrawerLayout.DrawerListener是个子类,可以监听drawer的状态和动向。尽量避免在监听到移动时咱们进行布局的绘制,否则会影响用户体验。如果你想用,可以在回调中的STATE_IDLE状态实现你的耗时操作。
从设计的角度来考虑,官方建议当gravity定义为left/start时,滑出来的东西要提供整个app的引导功能,定义为right/end时,滑出来的东西通常是要提供操作该页面的入口。

子类

接口
DrawerLayout.DrawerListener 监听动作事件;
DrawerLayout.LayoutParams
DrawerLayout.SavedState 存储drawer的状态
DrawerLayout.SimpleDrawerListener DrawerListener接口的空实现(这个设计思想非常好)

常量

  • LOCK_MODE_LOCKED_CLOSED
    处于锁定关闭状态?
  • LOCK_MODE_LOCKED_OPEN
    处于锁定打开状态?
  • LOCK_MODE_UNDEFINED
    默认状态
  • LOCK_MODE_UNLOCKED
    没有被锁定
  • STATE_DRAGGING
    用户触摸drawer并且来回滑动
  • STATE_IDLE
    空闲状态
  • STATE_SETTLING
    被设置到了一个给定的位置

方法

公共方法

  • addDrawerListener(DrawerLayout.DrawerListener listener)
    添加监听用来监视用户对于drawer的拖拽
  • addFocusables(ArrayList views, int direction, int focusableMode)
    给可以添加焦点的views添加监控
  • void addView(View child, int index, ViewGroup.LayoutParams params)
    这个应该不算是它特有的方法,把view添加到父view中
  • void closeDrawer(View drawerView)
    关闭指定的drawer
  • void closeDrawer(int gravity)
    通过gravity关闭drawer
  • void closeDrawer(View drawerView, boolean animate)
    关闭指定的drawer并且指定动画
  • void closeDrawer(int gravity, boolean animate)
    通过gravity关闭drawer并且指定是否使用动画
  • void closeDrawers()
    关闭当前所有的drawer
  • void computeScroll()
    父布局调用计算出子布局的mScrollX和mScrollY的值。
  • ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs)
    这个不用我说了吧
  • float getDrawerElevation()
    获取drawer相对于父布局的高度?
  • int getDrawerLockMode(int edgeGravity)
    检查drawer的锁定模式
  • int getDrawerLockMode(View drawerView)
    检查drawer的锁定模式
  • CharSequence getDrawerTitle(int edgeGravity)
    检查drawer的标题
  • Drawable getStatusBarBackgroundDrawable()
    获取状态栏图片
  • boolean isDrawerOpen(View drawer)
    通过drawer判断drawer是否打开
  • boolean isDrawerOpen(int drawerGravity)
    通过gravity判断drawer是否打开
  • boolean isDrawerVisible(View drawer)
    通过drawer判断drawer是否可见 -
  • boolean isDrawerVisible(int drawerGravity)
    通过gravity判断drawer是否可见
  • void onDraw(Canvas c)
    画呗
  • boolean onInterceptTouchEvent(MotionEvent ev)
    拦截touch的事件监听
  • boolean onKeyDown(int keyCode, KeyEvent event)
    这个不用说了吧
  • boolean onKeyUp(int keyCode, KeyEvent event)
    这个不用说了吧
  • void onRtlPropertiesChanged(int layoutDirection)
    布局的方向,文字的方向,文字的对齐发生变化时都会调用
  • boolean onTouchEvent(MotionEvent ev)
    监听触摸事件
  • void openDrawer(View drawerView, boolean animate)
    打开drawer
  • void openDrawer(View drawerView)
    打开drawer
  • void openDrawer(int gravity)
    打开drawer
  • void openDrawer(int gravity, boolean animate)
    打开drawer
  • void removeDrawerListener(DrawerLayout.DrawerListener listener)
    移除监听,这个应该是在destory的时候调用,免得发生anr
  • void requestDisallowInterceptTouchEvent(boolean disallowIntercept)
    子布局不想让父类监听拦截触摸事件
  • void requestLayout()
    不用我说了吧
  • void setDrawerElevation(float elevation)
    设置相对于父布局的高度
  • void setDrawerListener(DrawerLayout.DrawerListener listener)
    This method is deprecated.
  • void setDrawerLockMode(int lockMode, View drawerView)
    设置锁定模式
  • void setDrawerLockMode(int lockMode)
    设置锁定模式
  • void setDrawerLockMode(int lockMode, int edgeGravity)
    设置锁定模式
  • void setDrawerShadow(int resId, int gravity)
    设置阴影
  • void setDrawerShadow(Drawable shadowDrawable, int gravity)
    设置阴影
  • void setDrawerTitle(int edgeGravity, CharSequence title)
    设置标题
  • void setScrimColor(int color)
    设置一个虚化
  • void setStatusBarBackground(Drawable bg)
    设置statusbar的背景
  • void setStatusBarBackground(int resId)
    设置statusbar的背景
  • void setStatusBarBackgroundColor(int color)
    设置statusbar的背景

受保护的方法

  • void checkLayoutParams(ViewGroup.LayoutParams p)
  • boolean drawChild(Canvas canvas, View child, long drawingTime)
    画一个子view
  • ViewGroup.LayoutParams generateDefaultLayoutParams()
    返回layout parameters.的集合.
  • ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p)
    返回layout parameters.的集合.
  • void onAttachedToWindow()
    当view添加到window上时调用的方法
  • void onDetachedFromWindow()
    当view离开window时调用的方法
  • void onLayout(boolean changed, int l, int t, int r, int b)
    不用说了吧
  • void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    不用说了吧
  • void onRestoreInstanceState(Parcelable state)
    保存丢失的状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值