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.控件通用行为和属性
View是Android中所有控件类的基类,因此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() // 获得控件的id(int类型)
public void setId(int id) //设置控件的id(int类型)
public Object getTag() //获得控件的tag(Object类型)
public void setTag(Objecttag) // 设置控件的tag(Object类型)
对于一个控件,也就是View的继承者,整数类型id是其主要的标识。其中,getId()可以获得控件的id,而setId()可以将一个整数设置为控件的id,但是这个方法并不常用。View的id通常可以在布局文件中获得。
Object类型的标识tag是控件的一个扩展标识,由于使用了Object类型,它可以接受大部分的Java类型。
在一个View中根据id或者tag查找其孩子的方法如下所示:
public final View findViewById(int id)
public final View findViewWithTag(Object tag)
findViewById()和findViewWithTag()的目的是返回这个View树中id和tag为某个数值的View的句柄。View树的含义是View及其所有的孩子。
值得注意的是,id不是控件的唯一标识,例如布局文件中id是可以重复的,在这种重复的情况下,findViewById()的结果不能确保找到唯一的控件。
提示:作为控件的标识的id和tag可以配合使用:当id有重复的时候,可以通过给控件设置不同的tag,对其进行区分。
可见性的问题,android:visibility在布局文件中有三个数值:visible(可见,默认),invisible(不可见),gone(去除)。在Java代码中,setVisibility()能使用的枚举值与其对应,它们是:View.VISIBLE(0x0),View.INVISIBLE(0x4),View.GONE(0x8)。
参考示例程序:Visibility(ApiDemo=>Views)
源代码:com/example/android/apis/view/visibility_1.java
布局文件:visibility_1.xml
Visibility程序的运行效果如图3-2所示。
对于文字为View B的文本框,分别使用了visible、invisible和gone设置。invisible和gone的区别在于invisible只是不可见,但是依然占位,gone表示将控件去除,显示的效果就像没有这个控件存在。
和View形态相关的几个方法如下所示:
public void invalidate () // 使无效(重新绘制)
public void requestLayout () // 申请重新布局
public final boolean requestFocus () //申请聚焦
这几个方法都和View的显示形态有关:invalidate()方法的功能是使得无效,用于重新绘制当前的View;requestLayout()用于更新View树,也就是由当前View的大小位置变化更新与其相关的View;requestFocus()用于申请当前的聚焦。
查找聚焦的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:nextFocusUp和android:nextFocusDown分别是上下按键的时候,下一个聚焦的控件的id。
——本段文字节选自《Android经典应用程序开发》
图书详细信息:http://blog.csdn.net/broadview2006/article/details/7276196
Android中的控件相关推荐
- android中ListView控件onItemClick事件中获取listView传递的数据
http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...
- Android中ExpandableListView控件基本使用
本文採用一个Demo来展示Android中ExpandableListView控件的使用,如怎样在组/子ListView中绑定数据源.直接上代码例如以下: 程序结构图: layout文件夹下的 mai ...
- android通过代码设置铃声_第六十四回:Android中UI控件之SeekBar
各位看官们,大家好,上一回中咱们说的是Android中UI控件之ProgressBar的例子,这一回咱们的例子是UI控件之SeekBar.闲话休提,言归正转.让我们一起Talk Android吧! 看 ...
- android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础
各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView优化的例子,这一回咱们说的例子是UI控件之RecyclerView.闲话休提,言归正转.让我们一起Talk Androi ...
- android 触摸监听重写_第六十四回:Android中UI控件之SeekBar
各位看官们,大家好,上一回中咱们说的是Android中UI控件之ProgressBar的例子,这一回咱们的例子是UI控件之SeekBar.闲话休提,言归正转.让我们一起Talk Android吧! 看 ...
- android中倒计时控件CountDownTimer分析
android中倒计时控件CountDownTimer分析1 示例代码 new CountDownTimer(10000, 1000) {public void onTick(long millisU ...
- 微信小程序手把手教你实现类似Android中ViewPager控件效果
微信小程序手把手教你实现类似Android中ViewPager控件效果 前言 需求分析 头部TAB 滑动的内容部分 最终版本 尾巴 前言 在做Android开发的时候,ViewPager是开发者使用频 ...
- listview控件Android,Android中ListView控件的简单使用
文章引自郭霖<第一行代码> ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕 使用LIstView控件 1 在布局文件中引入Li ...
- Android中设置控件可见与不可见详解
通常控件的可见与不可见分为三种情况. 第一种 gone 表示不可见并且不占用空间 第二种 visible 表示可见 第三种 invisible 表示不可见但是占用空间 可见与不可见的表现形式有两种. ...
- android中设置控件获得焦点 (转)
android中,要使控件获得焦点,需要先setFocus,再requestFocus. 以Button为例: btn.setFocusable(true); ...
最新文章
- python替换字符串内容
- 【TAMU】最新《时间序列分析》课程笔记,512页pdf
- 解决ora-00054 Oracle锁表问题
- 223. Rectangle Area
- HDU1066--高精度求阶乘最后非零位
- Shell 变量及函数讲解 [2]
- c++ string截取字符串_String类的常见用法
- 数据库-MySQL-数据库设计-主键与索引
- html新增的选择器,HTML5新增的选择器
- 一文带你了解MultiBERT
- js实现无刷新表单提交文件,将ajax请求转换为form请求方法
- 全国大学生飞思卡尔智能车竞赛小记
- 用计算机画统计图,统计图
- 【软件测试】以闭环思维解决BUG复现率高问题
- 上传图片格式一句话木马
- js开根号_原生js数值开根算法
- TPS和QPS的区别
- 深度学习论文:Deep Residual Learning for Image Recognition
- 禁忌搜索算法TS(学习笔记_04)
- python二进制数据存入数据库_python+ mysql存储二进制流的方式