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_height和android: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)|指定该子组件上边的页边距

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

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

完全使用Java代码来控制UI界面不仅繁琐,而且不利于解耦;而完全利用XML布局文件来控制UI界面虽然方便、便捷,但难免有失灵活。因此有时候,可能需要混合利用XML布局文件和代码来控制UI界面。

当混合使用XML布局文件和代码来控制UI界面时,习惯上把变化小、行为比较固定的组件放在XML布局文件中管理,而那些变化较多、行为控制比较复杂的组件则交给Java代码来管理。

当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)

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

android界面编程内部类,Android精讲--界面编程1(界面编程与视图的组件)相关推荐

  1. 三菱PLC编程与案例精讲之ST语言

    想看到如何使用三菱ST文本结构化编程语言来编写通讯程序吗,比如让你用ST编写Modbus代码.编写Socket代码.用ST控制伺服进行各种动作,用ST实现多轴联动,电子凸轮,应该怎么做吗? 第一章 S ...

  2. MySQL精讲(一) |DQL数据查询语句全解析

    MySQL精讲系列文章(更新完毕) <MySQL入门必看知识> <MySQL精讲(一) | DQL数据查询语句全解析> <MySQL精讲(二) | DML数据操作语句全解 ...

  3. Android精讲--界面编程2(布局管理器)

    为什么需要布局管理器 为了更好地管理Android应用的用户界面里的各种组件,Android提供了布局管理器.通过使用布局管理器,Android应用的图形用户界面具有良好的平台无关性.通常来说,推荐使 ...

  4. 疯狂Android讲义(二)——第一部分:界面编程与视图 (View) 组件详解

    这里主要针对一些控件和布局的使用,篇幅会有点长.而且,不会像第一章一样全部详细列出.本章主要会用知识点的方式展示内容. ① Android应用开发的-项内容就是用户界面的开发.不管应用实际包含的逻辑多 ...

  5. 精讲精练_参悟Android核心技术-张晓飞-专题视频课程

    精讲精练_参悟Android核心技术-92074人已学习 课程介绍         如果你没有Android基础, 它是你的首选:从搭建环境开始,逐步讲解四大组件.用户界面.数据存储等核心知识: 如果 ...

  6. Android常用控件之Fragment仿Android4.0设置界面

    Fragment是Android3.0新增的概念,是碎片的意思,它和Activity很相像,用来在一个Activity中描述一些行为或部分用户界面:使用多个Fragment可以在一个单独的Activi ...

  7. android选项菜单源代码,Android应用程序----UI界面控件(菜单menu)

    菜单是应用程序中非常重要的组成部分,能够在不占用界面空间的前提下,为应用程序提供了统一的功能和设置界面,并为程序开发人员提供了易于使用的编程接口 Android系统支持三种菜单 选项菜单(Option ...

  8. android 悬浮窗口和主界面同时显示,Android 悬浮窗口(及解决6.0以上无法显示问题)...

    思路实现 通过WindowManager添加一个View,创建一个系统顶级的窗口,实现悬浮窗口的效果. 本篇思路,来源于郭霖大神的悬浮窗口教程. 大致介绍WindowManager 类 创建的对象: ...

  9. android win8风格布局,Android仿Win8界面开发

    本文将要模仿Win8界面的一个设计,一个一个的方块.方法很简单.这里自己把图片改改就可以成为自己想要的界面了. 1.首先来看看自定义的MyImageView: package com.example. ...

  10. android中注册用户界面,Android用户注册界面

    搜索热词 先给大家展示下界面效果图,感觉满意,请参考实现代码. Main.xml源码 android:layout_width="match_parent" android:lay ...

最新文章

  1. [云炬ThinkPython阅读笔记]2.10 练习
  2. 【数据竞赛】可能是全网特征工程实操最通透的...
  3. html期末网页设计,求网页设计的期末作业一份 HTML的
  4. c++和c语言的区别_C与C++傻傻分不清楚,有啥区别,咋用,杂学?
  5. JavaTPoint 移动开发教程【翻译完成】
  6. 讯飞输入法pad版x86_讯飞搜狗为何抵不过百度输入法?读完你就明白了
  7. yytextview 复制_用YYTextView 实现填空题作答功能
  8. 洛谷 CSP2019-J2 自测 P5661 公交换乘
  9. 哔哩哔哩缓存视频无声音,使用python合成音频与视频
  10. PIPIOJ1103: PIPI的数学题I/同余定理
  11. 梳理19年上半年图文记录笔记(ios篇)
  12. 有奖互动 | 秋天的第一行代码
  13. 大数据 - 大数据开发技术课程总结(未完)
  14. GIT 修改用户名和密码
  15. webrtc jitter buffer
  16. 道路交通安全改善解决方案PPT
  17. 伦敦港竟与这事脱不了干系 | 经济学人全球早报精选
  18. UE4_第三方库的引用
  19. ionic cordova实现获取显示手机通讯录
  20. SU-03T语音模块的使用(持续更新)

热门文章

  1. 大B与小b的区别(Bps与bps)
  2. Microsoft Dynamic CRM 自定义重复检测功能
  3. 智能情绪分析技术_高新技术改造传统企业,智能化解决粘度分析行业
  4. java确定随机数组的范围_Java程序以生成一定范围内的随机数数组并获取最小值和最大值...
  5. 用python股票_十分钟学会用Python交易股票
  6. 数据结构与算法-浙江大学陈越数据结构第一章学习
  7. android阴影edittext,android – 将阴影效果添加到EditText字段
  8. 电脑用电量_诡异!北山一空置房子用电量噌噌上涨,工作人员打开门一看……_媒体_澎湃新闻...
  9. html获取页面input值,javascript怎么获取input中用户输入的内容?
  10. 人体识别_你知道人脸识别,但你知道人体识别吗?ReID技术了解一下!