zoukankan      html  css  js  c++  java
  • Android精讲--界面编程1(界面编程与视图的组件)

    界面编程与视图的组件

    视图组件与容器组件

    Android应用的绝大部分UI组件都放在android.widget包及其子包、android.view包及其子包中,Android应用的所有UI组件都继承了View类。
    View类还有一个重要的子类:ViewGroup,但ViewGroup通常作为其他组件的容器使用。

    Android的所有UI组件都是建立在View、ViewGroup基础之上的,Android采用了“组合器”设计模式来设计View和ViewGroup:ViewGroup是View的子类,因此ViewGroup也可被当成View使用。ViewGroup作为容器来盛装其它组件,而ViewGroup里除了可以包含普通View组件之外,还可以再次包含ViewGroup组件。

    图形用户界面的组件层次

    Android推荐使用XML布局文件来定义用户界面,而不是使用Java代码来开发用户界面,因此所有组件都提供了两种方式来控制组件的行为:

    • 在XML布局文件中通过XML属性进行控制
    • 在Java程序代码中通过调用方法进行控制

    # View类的XML属性、相关方法及说明

    XML属性
    相关方法
    说明

    android:alpha
    setAlpha(float)
    设置该组件的透明度

    android:background
    setBackgroundResource(int)
    设置该组件的背景颜色

    android:clickable
    setClickable(boolean)
    设置该组件是否可以激发单击事件

    android:contentDescription
    setContentDescription(CharSequence)
    设置该组件的主要描述信息

    android:drawingCacheQuality
    setDrawingCacheQuality(int)
    设置该组件所使用的绘制缓存的质量

    android:fadeScrollbars
    setScrollbarFadingEnabled(boolean)
    当不使用该组件的滚动条时,是否淡出显示滚动条

    android:fadingEdge
    setVerticalFadingEdgeEnabled(boolean)
    设置滚动该组件时组件边界是否使用淡出效果

    android:fadingEdgeLength
    getVerticalFadingEdgeLength()
    设置淡出边界的长度

    android:focusable
    setFocusable(boolean)
    设置该组件是否可以得到焦点

    android:focusableInTouchMode
    setFocusableInTouchMode(boolean)
    设置该组件在触摸模式下是否可以得到焦点

    android:id
    setId(int)
    设置该组件的唯一标识,Java代码中可通过findViewById来获取它

    android:isScrollContainer
    setScrollContainer(boolean)
    设置该组件是否是作为可滚动容器使用

    android:nextFocusDown
    setNextFocusDownId(int)
    设置焦点在该组件上,且按向下键时获得焦点的组件ID

    android:nextFocusLeft
    setNextFocusLeftId(int)
    设置焦点在该组件上,且按向左键时获得焦点的组件ID

    android:nextFocusRight
    setNextFocusRightID(int)
    设置焦点在该组件上,且按向右键时获得焦点的组件ID

    android:nextFocusUp
    setNextFocusUpId(int)
    设置焦点在该组件上,且按向上键时获得焦点的组件ID

    android:onClick
    为该组件的单击事件绑定监听器

    android:padding
    setPadding(int,int,int,int)
    在组件的四边设置填充区域

    android:paddingBottom
    setPadding(int,int,int,int)
    在组件的下边设置填充区域

    android:paddingLeft
    setPadding(int,int,int,int)
    在组件的左边设置填充区域

    android:paddingRight
    setPadding(int,int,int,int)
    在组件的右边设置填充区域

    android:paddingTop
    setPadding(int,int,int,int)
    在组件的上边设置填充区域

    android:rotation
    setRotation(float)
    设置该组件的旋转角度

    android:rotationX
    setRotationX(float)
    设置该组件绕X轴旋转的角度

    android:rotationY
    setRotationX(float)
    设置该组件绕Y轴旋转的角度

    android:saveEnabled
    setSaveEnabled(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:soundEffectsEnabled
    setSoundEffectsEnabled(boolean)
    设置该组件被单击时是否使用音效

    android:tag
    为该组件设置一个字符串类型的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:visibility
    setVisibility(int)
    设置该组件是否可见

    ViewGroup容器控制其子控件的分布依赖于ViewGroup.LayoutParams、ViewGroup.MarginLayoutParams两个内部类。
    # ViewGroup.LayoutParams支持的两个XML属性

    XML属性
    说明

    android:layout_height
    指定该子组件的布局高度

    android:layout_width
    指定该子组件的布局宽度

    android:layout_heightandroid:layout_width支持的属性值:

    • match_parent :指定子组件的高度/宽度与父组件的高度/宽度相同
    • wrap_content :指定子组件的大小恰好能包裹它的内容即可

    # ViewGroup.MarginLayoutParams支持的属性

    XML属性|相关方法|说明
    ---|---
    android:layout_marginBottom|setMargins(int,int,int,int)|指定该子组件下边的页边距
    android:layout_marginLeft|setMargins(int,int,int,int)|指定该子组件左边的页边距
    android:layout_marginRight|setMargins(int,int,int,int)|指定该子组件右边的页边距
    android:layout_marginTop|setMargins(int,int,int,int)|指定该子组件上边的页边距

    使用XML布局文件控制UI界面

    Android推荐使用XML布局文件来控制视图,这样不仅简单、明了,而且可以将应用的视图控制逻辑从Java代码中分离出来,放入XML文件中控制,从而更好地体现MVC原则。

    在代码中控制UI界面

    虽然Android推荐使用XML布局文件来控制UI界面,但如果开发者愿意,Android允许开发者完全抛弃XML布局文件,完全在Java代码中控制UI界面。

    使用XML布局文件和Java代码混合控制UI界面

    完全使用Java代码来控制UI界面不仅繁琐,而且不利于解耦;而完全利用XML布局文件来控制UI界面虽然方便、便捷,但难免有失灵活。因此有时候,可能需要混合利用XML布局文件和代码来控制UI界面。
    当混合使用XML布局文件和代码来控制UI界面时,习惯上把变化小、行为比较固定的组件放在XML布局文件中管理,而那些变化较多、行为控制比较复杂的组件则交给Java代码来管理。

    开发自定义View

    当Android系统提供的UI组件不足以满足项目需要时,开发者可以通过继承View来派生自定义组件。

    当开发者打算派生自己的UI组件时,首先定义一个继承View基类的子类,然后重写View类的一个或多个方法。
    通常可以被用户重写的方法如下:

    方法名
    说明

    构造器
    重写构造器是定制View的最基本方式,当Java代码创建一个View实例,或根据XML布局文件加载并构建界面时将需要调用该构造器

    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)
    当发生触摸屏事件时触发该方法

    onWindowFocusChanged(boolean)
    当该组件得到、失去焦点时触发该方法

    onAttachedToWindow()
    当把该组件放入某个窗口时触发该方法

    onDetachedFromWindow()
    当把该组件从某个窗口上分离时触发该方法

    onWindowVisibilityChanged(int)
    当包含该组件的窗口的可见性发生改变时触发该方法

    岁月本长而忙者自促;天地本宽而卑者自隘;风花雪月本闲,而劳忧者自冗;天行健,君子以自强不息;地势坤,君子以厚德载物;宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒.不妄取,不妄予,不妄想,不妄求,与人方便,随遇而安
  • 相关阅读:
    Verilog HDL的程序结构及其描述
    VerilogHDL概述与数字IC设计流程学习笔记
    常用算法与设计模式
    DOM笔录
    JavaScript笔录
    Windows系统版本型号MSDN版、OEM版、RTM版、VOL版区别
    Yaml学习笔录
    Linux关闭iptables以及selinux
    Centos配置163YUM源
    utf8 和 UTF-8 在使用中的区别
  • 原文地址:https://www.cnblogs.com/vvning/p/9413954.html
Copyright © 2011-2022 走看看