zoukankan      html  css  js  c++  java
  • Android中的控件

    Android中的控件

    1.控件类的继承结构

    android.view.View类(视图类)呈现了最基本的UI构造块。一个视图占据屏幕上的一个方形区域,并且负责绘制和事件处理。

    Android中控件类的扩展结构如图3-1所示。

     

     

    View有众多的扩展者,它们大部分是在android.widget包中,这些继承者实际上就是Android系统中的“控件”。View实际上就是各个控件的基类,创建交互式的图形用户界面的基础。

    View的直接继承者包括文本视图(TextView)、图像视图(ImageView)、进度条(ProgressBar)等。它们各自又有众多的继承者。每个控件除了继承父类功能之外,一般还具有自己的公有方法、保护方法、XML属性等。

    Android中使用各种控件的一般情况是在布局文件中可以实现UI的外观,然后在Java文件中实现对各种控件的控制动作。控件类的名称也是它们在布局文件XML中使用的标签名称。

    2.控件通用行为和属性

    ViewAndroid中所有控件类的基类,因此View中一些内容是所有控件类都具有的通用行为和属性。

     提示:由于Java语言不支持多重继承,因此Android控件不可能以基本功能的“排列组合”的方式实现。在这种情况下,为了实现功能的复用,基类的功能往往做得较强,作为控件的祖先类,View所实现的功能也是最多的。

    控件类经常在布局文件中使用,因此其可以使用XML属性(XMLAttributes),和Java代码经常具有对应关系。

    View作为各种控件的基类,其XML属性所有控件通用,几个重要的XML属性如表3-1所示。

    3-1  View中几个重要XML属性及其对应的方法

    XML属性

    Java中的方法

       

    android:id

    setId(int) 

    控件的标识

    android:visibility

    setVisibility(int)

    控件的可见性

    android:background

    setBackgroundResource(int)

    控件的背景

    其中,android:id表示控件的标识,通常需要在布局文件中指定这个属性。View中与控件标识相关的几个方法如下所示:

    public int  getId()                        // 获得控件的idint类型)

    public void setId(int id)               // 设置控件的idint类型)

    public Object  getTag()                  // 获得控件的tagObject类型)

    public void  setTag(Object tag)        // 设置控件的tagObject类型)

    对于一个控件,也就是View的继承者,整数类型id是其主要的标识。其中,getId()可以获得控件的id,而setId()可以将一个整数设置为控件的id,但是这个方法并不常用。Viewid通常可以在布局文件中获得。

    Object类型的标识tag是控件的一个扩展标识,由于使用了Object类型,它可以接受大部分的Java类型。

    在一个View中根据id或者tag查找其孩子的方法如下所示:

    public final View  findViewById(int id) 

    public final View  findViewWithTag(Object tag) 

    findViewById()findViewWithTag()的目的是返回这个View树中idtag为某个数值的View的句柄。View树的含义是View及其所有的孩子。

    值得注意的是,id不是控件的唯一标识,例如布局文件中id是可以重复的,在这种重复的情况下,findViewById()的结果不能确保找到唯一的控件。

     提示:作为控件的标识的idtag可以配合使用:当id有重复的时候,可以通过给控件设置不同的tag,对其进行区分。

    可见性的问题,android:visibility在布局文件中有三个数值:visible(可见,默认),invisible(不可见),gone(去除)。在Java代码中,setVisibility()能使用的枚举值与其对应,它们是:View.VISIBLE0x0),View.INVISIBLE0x4),View.GONE0x8)。

    参考示例程序:VisibilityApiDemo=>Views

    源代码:com/example/android/apis/view/ visibility_1.java

    布局文件:visibility_1.xml

    Visibility程序的运行效果如图3-2所示。

     

      

    对于文字为View B的文本框,分别使用了visibleinvisiblegone设置。invisiblegone的区别在于invisible只是不可见,但是依然占位,gone表示将控件去除,显示的效果就像没有这个控件存在。

    View形态相关的几个方法如下所示:

    public void invalidate ()                         // 使无效重新绘制

    public void requestLayout ()                     // 申请重新布局

    public final boolean requestFocus ()          // 申请聚焦

    这几个方法都和View的显示形态有关invalidate()方法的功能是使得无效,用于重新绘制当前的ViewrequestLayout()用于更新View也就是由当前View的大小位置变化更新与其相关的ViewrequestFocus()用于申请当前的聚焦。

    查找聚焦的View的方法如下所示

    public View findFocus ()             // 找到聚焦的View

    在布局文件中,如果在一个控件的标签中使用<requestFocus />标签,表示指定它在默认情况下被聚焦。当使用上、下、左、右按键的时候,各个控件有着默认的聚焦顺序。其他聚焦的问题可以在布局文件中进一步处理,一个处理的方法如下所示:

    <LinearLayout android:orientation="vertical">

        <Button android:id="@+id/top"     android:nextFocusUp="@+id/bottom" />

        <Button android:id="@+id/bottom" android:nextFocusDown="@+id/top" />

    </LinearLayout>

    这里android:nextFocusUpandroid:nextFocusDown分别是上下按键的时候,下一个聚焦的控件的id

     

    ——本段文字节选自《Android经典应用程序开发》

    图书详细信息:

    http://www.cnblogs.com/broadview/archive/2012/02/20/2359593.html

  • 相关阅读:
    寒假Day37:设计模式(封装+继承+多态等)
    INF ClassInstall32 Section详解
    VS2008编译的程序运行提示“由于应用程序配置不正确,应用程序未能启动”
    INF Models Section
    INF DDInstall.Services Section
    INF ClassInstall32.Services Section详解
    INF DDInstall Section
    INF SourceDisksNames Section 和 SourceDisksFiles Section详解
    sys文件查看DbgPrint函数打印的信息
    IRP(I/O Request Package)详解
  • 原文地址:https://www.cnblogs.com/broadview/p/2363265.html
Copyright © 2011-2022 走看看