android界面编程内部类,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组件。

a5bdd5f9465e?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图形用户界面的组件层次

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)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值