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

本文介绍了Android用户界面开发的基础知识,包括View与ViewGroup的概念及作用,XML布局文件的应用,以及如何通过MVC模式实现界面与业务逻辑的分离。此外,还列举了View组件的常用XML属性和方法,并对ViewGroup的布局排版进行了详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


View与ViewGroup

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

控件树

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

XML属性相关方法说明
android:alphasetAlpha(float)设置该组件的透明度
android:backgroundsetBackgroundResource(int)设置该组件的背景颜色
android:clickablesetClickable(boolean)设置该组件是否可以激发点击事件
android:contentDescriptionsetContentDescription
(CharSequence)
设置该组件内容的描述信息
android:drawingCacheQualitysetDrawingCacheQuality(int)设置该组件所使用的绘制缓存的质量
android:elevationsetElevation(float)设置该组件”浮”起来的高度, 通过设置该属性可以让该组件呈现3D 效果
android:fadeScrollbarssetScrollbarFadingEnabled
(boolean)
当不使用该组件的滚动条时, 是否淡出显示滚动条
android:fadingEdgesetVerticalFadingEdgeEnable
(boolean)
设置滚动该组件时, 组件边界是否使用淡出效果
android:fadingEdgeLengthsetFadingEdgeLength(int)设置淡出边界的长度
android:focusablesetFocusable(boolean)设置该组件是否可以获得焦点
android:focusableInTouchModesetFocusableInTouchMode
(boolean)
设置该组件在触摸模式下是否可以获得焦点
android:idsetId(int)设置该组件的唯一标识. 在Java 代码中可以通过 findViewById 获取该组件
android:isScrollContainersetScrollContainer(boolean)设置该组件是否可以作为滚动容器使用
android:keepScreenOnsetKeepScreenOn(boolean)设置该组件是否会强制手机屏幕一直打开
android:longClickablesetLongClickable(boolean)设置该组件是否可以响应长单击事件
android:minHeightsetMinimumHeight(int)设置该组件的最小高度
android:minWidthsetMinimumWidth(int)设置该组件的最小宽度
android:nextFocusDownsetNextFocusDown(int)设置焦点在该组件上时, 单机下方向键时, 获得焦点组件的ID
android:nextFocusLeftsetNextFocusLeft(int)设置焦点在该组件上时, 单机左方向键时, 获得焦点组件的ID
android:nextFocusRightsetNextFocusRight(int)设置焦点在该组件上时, 单机右方向键时, 获得焦点组件的ID
android:nextFocusUpsetNextFocusUp(int)设置焦点在该组件上时, 单机上方向键时, 获得焦点组件的ID
android: onClick为该组件的单击事件绑定监听器
android:paddingsetPadding(int, int, int, int)在组件的四边设置填充区域
android:paddingBottom
android:paddingRight
android:paddingTop
android:paddingLeft
setPadding(int, int, int, int)设置组件指定方向的填充区域
android:rotationsetRotation(float)设置该组件的旋转角度
android:rotationXsetRotationX(float)设置该组件绕X轴的旋转角度
android:rotationYsetRotationY(float)设置该组件绕Y轴的旋转角度
android: saveEnablesetSaveEnable(boolean)如果为false, 那么当该组件被冻结时, 不会保存它的状态
android: scaleXsetScaleX(float)设置该组件在水平方向上的缩放比
android: scaleYsetScaleY(float)设置该组件在垂直方向上的缩放比
android: scrollX设置该组件初始化后的水平滚动偏移
android: scrollY设置该组件初始化后的垂直滚动偏移
android:
scrollbarAlwaysDrawHorizontalTrack
设置该组件是否总是显示水品滚动条
android:
scrollbarAlwaysDrawVerticalTrack
设置该组件是否总是显示垂直滚动条
android:
scrollbarDefaultDelayBeforeFade
setScrollBarDefaultDelayBeforeFade
(int)
设置滚动条淡出隐藏之前延迟多少秒
android:
scrollbarFadeDuration
setScrollBarFadeDuration
(int)
设置滚动条淡入淡出隐藏的过程需要多少秒
android: scrollbarSizesetScrollBarSize(int)设置水平和垂直滚动条的高度
android: scrollbarStylesetScrollBarStyle(int)设置滚动条的风格和位置. 该属性支持如下属性值:
insideOverlay,
insideInset,
outsideOverlay,
outsideInset
android: scrollbarThumbHorizontal设置该组件水平滚动条的滑块对应的drawable 图像
android: scrollbarThumbVertical设置该组件垂直滚动条的滑块对应的drawable 图像
android: scrollbarTrackHorizontal设置该组件水平滚动条的轨道对应的drawable 图像
android: scrollbarTrackVertical设置该组件垂直滚动条的轨道对应的drawable 图像
android: scrollbars定义该组件滚动时显示几个滚动条, 支持一下属性:
none 不显示滚动条;
horizontal 显示水平滚动条;
vertical 显示垂直滚动条;
android: soundEffectsEnablesetSoundEffectsEnable(boolean)设置该组件单机时是否使用音效
android:tagsetTag(Object)为该组件设置一个字符串类型的tag 值. 接下来可通过View 的getTag() 获取该字符串, 或通过findViewWithTag() 查找该组价
android:transformPivotXsetPivotX(float)设置该组件旋转时中心的X 坐标
android:transformPivotYsetPivotY(float)设置该组件旋转时中心的Y 的坐标
android:translationXsetTranslationX(float)设置该组件在X方向上的位移
android:translationYsetTranslationY(float)设置该组件在Y方向上的位移
android:translationZsetTranslationZ(float)设置该组件在Z方向上的位移
android:visibilitysetVisibility(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_marginLeftsetMargin(int,int,int,int)指定该子组件左边的页边距
android:layout_marginTopsetMargin(int,int,int,int)同理,对应setMargin()方法第二个参数
android:layout_marginRightsetMargin(int,int,int,int)同理, 对应第三个参数
android:layout_marginBottomsetMargin(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): 当包含该组件的窗口的可见性发生改变时, 触发该方法.

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值