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值。接下来可通过ViewgetTag()获取该字符串,或通过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发生变化时触发

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。