1. 0 Android 开发中的界面编程

    Android 开发的一项内容就是用户界面的开发, 不过应用包含多么复杂的逻辑, 如果这个应用没有提供友好的图形用户界面(Graphics User Interface, GUI), 最终也将很难吸引用户. (实际上, Windows之所以广为人知, 其最初的吸引力就是来自于它提供的图形用户界面)
   Android 提供了大量的UI 组件(如果觉得不够, 可以自己定义, 当然这个属于进阶技能), 只要把这些组件合理的搭建到一起, 就可以设计出优秀的界面.
    这些图形用界面是 Android 应用开发的基础, 也是开发重要的组成部分.


View与ViewGroup

     Android 所有的UI 组件都继承了View, 它代表一个空白的矩形区域.
     View 类有一个重要的子类: ViewGroup, ViewGroup 通常是用作容器使用, 而这时通过组合模式来建立的, 也可以理解为ViewGroup 是一个分支节点, 而View是一个叶子节点:

1. 0 Android 开发中的界面编程_第1张图片

     Android 中推荐使用 XML布局文件来定义用户界面, 其实是使用了MVC模式,
做到界面的与业务逻辑分离,也是解耦的一种体现.
     下面是View 对应的XML 属性和方法, 因为View 是UI 组建的基类, 所以所有的组件都可以使用这些方法.

XML属性 相关方法 说明
android:alpha setAlpha(float) 设置该组件的透明度
android:background setBackgroundResource(int) 设置该组件的背景颜色
android:clickable setClickable(boolean) 设置该组件是否可以激发点击事件
android:contentDescription setContentDescription
(CharSequence)
设置该组件内容的描述信息
android:drawingCacheQuality setDrawingCacheQuality(int) 设置该组件所使用的绘制缓存的质量
android:elevation setElevation(float) 设置该组件”浮”起来的高度, 通过设置该属性可以让该组件呈现3D 效果
android:fadeScrollbars setScrollbarFadingEnabled
(boolean)
当不使用该组件的滚动条时, 是否淡出显示滚动条
android:fadingEdge setVerticalFadingEdgeEnable
(boolean)
设置滚动该组件时, 组件边界是否使用淡出效果
android:fadingEdgeLength setFadingEdgeLength(int) 设置淡出边界的长度
android:focusable setFocusable(boolean) 设置该组件是否可以获得焦点
android:focusableInTouchMode setFocusableInTouchMode
(boolean)
设置该组件在触摸模式下是否可以获得焦点
android:id setId(int) 设置该组件的唯一标识. 在Java 代码中可以通过 findViewById 获取该组件
android:isScrollContainer setScrollContainer(boolean) 设置该组件是否可以作为滚动容器使用
android:keepScreenOn setKeepScreenOn(boolean) 设置该组件是否会强制手机屏幕一直打开
android:longClickable setLongClickable(boolean) 设置该组件是否可以响应长单击事件
android:minHeight setMinimumHeight(int) 设置该组件的最小高度
android:minWidth setMinimumWidth(int) 设置该组件的最小宽度
android:nextFocusDown setNextFocusDown(int) 设置焦点在该组件上时, 单机下方向键时, 获得焦点组件的ID
android:nextFocusLeft setNextFocusLeft(int) 设置焦点在该组件上时, 单机左方向键时, 获得焦点组件的ID
android:nextFocusRight setNextFocusRight(int) 设置焦点在该组件上时, 单机右方向键时, 获得焦点组件的ID
android:nextFocusUp setNextFocusUp(int) 设置焦点在该组件上时, 单机上方向键时, 获得焦点组件的ID
android: onClick 为该组件的单击事件绑定监听器
android:padding setPadding(int, int, int, int) 在组件的四边设置填充区域
android:paddingBottom
android:paddingRight
android:paddingTop
android:paddingLeft
setPadding(int, int, int, int) 设置组件指定方向的填充区域
android:rotation setRotation(float) 设置该组件的旋转角度
android:rotationX setRotationX(float) 设置该组件绕X轴的旋转角度
android:rotationY setRotationY(float) 设置该组件绕Y轴的旋转角度
android: saveEnable setSaveEnable(boolean) 如果为false, 那么当该组件被冻结时, 不会保存它的状态
android: scaleX setScaleX(float) 设置该组件在水平方向上的缩放比
android: scaleY setScaleY(float) 设置该组件在垂直方向上的缩放比
android: scrollX 设置该组件初始化后的水平滚动偏移
android: scrollY 设置该组件初始化后的垂直滚动偏移
android:
scrollbarAlwaysDrawHorizontalTrack
设置该组件是否总是显示水品滚动条
android:
scrollbarAlwaysDrawVerticalTrack
设置该组件是否总是显示垂直滚动条
android:
scrollbarDefaultDelayBeforeFade
setScrollBarDefaultDelayBeforeFade
(int)
设置滚动条淡出隐藏之前延迟多少秒
android:
scrollbarFadeDuration
setScrollBarFadeDuration
(int)
设置滚动条淡入淡出隐藏的过程需要多少秒
android: scrollbarSize setScrollBarSize(int) 设置水平和垂直滚动条的高度
android: scrollbarStyle setScrollBarStyle(int) 设置滚动条的风格和位置. 该属性支持如下属性值:
insideOverlay,
insideInset,
outsideOverlay,
outsideInset
android: scrollbarThumbHorizontal 设置该组件水平滚动条的滑块对应的drawable 图像
android: scrollbarThumbVertical 设置该组件垂直滚动条的滑块对应的drawable 图像
android: scrollbarTrackHorizontal 设置该组件水平滚动条的轨道对应的drawable 图像
android: scrollbarTrackVertical 设置该组件垂直滚动条的轨道对应的drawable 图像
android: scrollbars 定义该组件滚动时显示几个滚动条, 支持一下属性:
none 不显示滚动条;
horizontal 显示水平滚动条;
vertical 显示垂直滚动条;
android: soundEffectsEnable setSoundEffectsEnable(boolean) 设置该组件单机时是否使用音效
android:tag setTag(Object) 为该组件设置一个字符串类型的tag 值. 接下来可通过View 的getTag() 获取该字符串, 或通过findViewWithTag() 查找该组价
android:transformPivotX setPivotX(float) 设置该组件旋转时中心的X 坐标
android:transformPivotY setPivotY(float) 设置该组件旋转时中心的Y 的坐标
android:translationX setTranslationX(float) 设置该组件在X方向上的位移
android:translationY setTranslationY(float) 设置该组件在Y方向上的位移
android:translationZ setTranslationZ(float) 设置该组件在Z方向上的位移
android:visibility setVisibility(int) 设置该组件是否可见


ViewGroup 的布局排版

       ViewGroup 继承了 View 类, 主要是当成布局的容量器来使用. 由于ViewGroup是一个抽象类, 我们通常用他的子类, 比如各种布局管理器.
   容器内组件的分布依赖于ViewGroup.LayoutParams 和 ViewGroup.MarginLayoutParams 两个内部类

  • ViewGroup.LayoutParams 支持XML 属性
XML属性 说明
android:layout_height 指定该子组件布局的高度
android:layout_widht 指定该子组件布局的宽度


   android:layout_height, android:layout_width 两个属性支持如下三个属性值.
         fill_parent: 宽高与父容器的宽高相同(减去margin 边距);
         match_parent: 同fill_parent, google推荐使用;
         wrap_content: 组件的大小刚好能包裹他的内容


  • ViewGroup.MarginLayoutParams 支持XML 属性
XML属性 相关方法 说明
android:layout_marginLeft setMargin(int,int,int,int) 指定该子组件左边的页边距
android:layout_marginTop setMargin(int,int,int,int) 同理,对应setMargin()方法第二个参数
android:layout_marginRight setMargin(int,int,int,int) 同理, 对应第三个参数
android:layout_marginBottom setMargin(int,int,int,int) 同理对应第四个参数


有关于自定义View 的进阶

      自定义View属于andorid 进阶的一项高级技能, 这里只做简单的介绍. 待内功足够深厚, 在做深入探索.
     在自定义一个View 时, 通常会重写如下几个方法:

  • onFinishInflate(): 这是一个回调方法, 当应用从XML 布局文件加载组件并利用他来构建界面之后, 该方法会被会掉.
  • onMeasure(int, int): 调用该方法来检测View 组件及其所报行的所有子组件的大小
  • onLayout(boolean,int,int,int,int): 当该组件的大小被改变时会回调该方法.
  • onSizeChanged(int,int,int,int): 当该组件的大小被改变时回调该方法.
  • onDraw(Canvas): 当该组件将要绘制他的内容时,回调该方法进行绘制.
  • onKeyDown(int,KeyEvent): 当某个按健(物理键盘,现在已经不多见了)被按下时触发该方法.
  • onKeyUp(int,KeyEvent): 当松开某个键时触发该方法.
  • onTrackballEvent(MotionEvent):当发生轨迹球事件是触发该方法.
  • onTouchEvent(MotionEvent): 当发生触摸屏事件时触发该方法.
  • onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect): 当该组件的焦点发生改变时触发该方法.
  • onWindowFocusChanged(boolean): 当包含该组件的创狗是去或得到焦点时触发该方法.
  • onAttachToWindow(): 当把该组件放入某个窗口时触发该方法.
  • onDetachedFromWindow(): 当把该组件从某个窗口上分离时触发该方法.
  • onWindowVisibilityChanged(int): 当包含该组件的窗口的可见性发生改变时, 触发该方法.

    通常只需要重写几个相应的方法即可, 不需要全部重写.

    以上是对界面编程的一个基础的介绍, 可以大体的理解为一个框架,很多细节的东西需要后续添加进来.

你可能感兴趣的:(Android)