02_Android应用界面编程_01_视图(View)组件
1、视图组件与容器组件
Android绝大部分UI组件都放在android.widget和android.view包及其子包,所有的UI组件都继承了View类,ViewGroup则用于其他组件的容器。
XML属性 | 相关方法 | 说明 |
android:alpha | setAlpha(float) | 设置该组件的透明度 |
android:background | setBackgroundResource(int) | 设置该组件的背景颜色 |
android:clickable | setClickable(boolean) | 设置该组件是否可以激发单击事件 |
android:contentDescription | setContentDescription(CharSequence) | 设置该组件的主要描述信息 |
android:drawingCacheQuality | setDrawingCacheQuality(iint) | 设置该组件所使用的绘制缓存的质量 |
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:keepScreenOn | setKeepScreenOn(boolean) | 设置该组件是否会强制手机屏幕一直打开 |
android:longClickable | setLongClickable(boolean) | 设置该组件是否可以响应长单击事件 |
android:minHeight | setMinimumHeight(int) | 设置该组件的最小高度 |
android:minWidth | setMinimumWidtht(int) | 设置该组件的最小宽度 |
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:paddingLeft | setPadding(int,int,int,int) | 在组件的左边设置填充区域 |
android:paddingTop | setPadding(int,int,int,int) | 在组件的上边设置填充区域 |
android:paddingRight | setPadding(int,int,int,int) | 在组件的右边设置填充区域 |
android:paddingBottom | setPadding(int,int,int,int) | 在组件的下边设置填充区域 |
android:rotation | setRotation(float) | 设置该组件旋转的角度 |
android:rotationX | setRotationX(float) | 设置该组件绕X轴旋转的角度 |
android:rotationY | setRotationY(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:不显示滚动条 horizont:显示水平滚动条 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) | 设置该组件是否可见 |
*Drawable是Android提供的一个抽象类,包含了大量的子类,可以定制UI组件的背景等外观。
ViewGroup为一个抽象类,实际上通过他的子类来作为容器,例如各种布局容器,其通过ViewGroup.LayoutParams、ViewGroup.MarginLayoutParams两个内部类来控制期子组件的分布。
ViewGroup.LayoutParams两个属性
XML属性 | 说明 |
android:layout_height | 指定该子组件的布局高度 |
android:layout_width | 指定该子组件的布局宽度 |
他们都支持下面三个属性值:fill_parent、match_parent、wrap_content
ViewGroup.MarginLayoutParams支持的属性
XML属性 | 方法 | 说明 |
android:layout_marginButton | setMargins(int,int,int,int) | 指定该子组件下边的页边距 |
android:layout_marginLeft | ||
android:layout_marginRight | ||
android:layout_marginTop |
2、使用XML布局控制UI界面
java代码在Activity中显示视图:
setContentView(R.layout.<资源文件id>);
java代码中访问UI组件:
findViewBuId(R.id.<android.id属性值>);
3、在代码中控制Ui界面
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.main); // 创建一个线性布局管理器 LinearLayout layout = new LinearLayout(this); // 设置该Activity显示layout super.setContentView(layout); layout.setOrientation(LinearLayout.VERTICAL); // 创建一个TextView final TextView show = new TextView(this); // 创建一个按钮 Button bn = new Button(this); bn.setText("OK"); bn.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); //向layout容器中添加TextView layout.addView(show); //向Layout中添加按钮 layout.addView(bn); //为按钮绑定一个事件监听器 bn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 show.setText("单击成功"); } }); }
上面的this是一个Context对象,他代表访问Android应用环境的全局信息的API。他本身是一个抽象类,Activity、Service都继承了Context。
4、一般结合XMl布局和代码混合控制UI界面
这种情况下,习惯把变化小、行为比较固定的组件放在XML布局文件中管理,而那些变化多,行为控制比较复杂的组件交给java代码来管理。
5、开发自定义的View
当Android系统提供的Ui组件不足以满足项目需求是,我们可以通过继承View来派生自定义组件。
首先定义一个继承View基类的子类,然后重写View类的一个或多个方法。
- 构造器:View被实例化或者被加载并构建界面时将需要调用构造器
- onFinishInflate() 当View中所有的子控件均被映射成xml后触发
- onMeasure(int, int) 确定所有子元素的大小
- onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发
- onSizeChanged(int, int, int, int) 当view的大小发生变化时触发
- onDraw(Canvas) view渲染内容的细节
- onKeyDown(int, KeyEvent) 有按键按下后触发
- onKeyUp(int, KeyEvent) 有按键按下后弹起时触发
- onTrackballEvent(MotionEvent) 轨迹球事件
- onTouchEvent(MotionEvent) 触屏事件
- onFocusChanged(boolean, int, Rect) 当View获取或失去焦点时触发
- onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发
- onAttachedToWindow() 当view被附着到一个窗口时触发
- onDetachedFromWindow() 当view离开附着的窗口时触发,Android123提示该方法和 onAttachedToWindow() 是相反的。
- onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。