=============================================
完整的在附件中
=============================================
5 使用基于xml的布局(Layouts)
从技术角度上讲,纯粹使用java代码是可以实现所有的程序的功能的。但是,我们更推荐的是使用xml文件,来完成界面布局等方面的工作。下面,就让我们打开xml文件,看看如何使用xml来进行android的界面绘制吧
长什么样子呢?
这里的界面例子,包含一个按钮。
因为Button虽然我们之前看到的是一个类名,其实我们更可以理解它是由android提供的一个小部件(Widget),既然这样,我们就可以在xml文件中使用这个名字作为标签了。
当然,android不仅只有这一个button小部件了,我们能想象到的所有界面控件都有对应的类名哦~~~
同时,除了使用系统提供的小部件以外,我们也可以自己定义属于自己的小部件。在前面,我们说过,可以把button 看做一个view,没错,只要我们定义一个继承自android.view.View的类,并实现相应的方法,那么ok,我们就定义了属于自己的小部件了。
只不过,没问在引用这个小部件的时候,需要引用完整的类名哦~~
比如: com.allen.android.Mywidget
因为我们从java代码中引用这个button,所以我们需要给它定义一个Id,标识符。 通过
Android :id属性,就可以了
同时,在 <button >标签中,系统给我们定义了很多其他好用的属性,比如:、
l android :text 表示按钮上所显示的文本
l android :layout_width/height : 表示按钮的宽度或者高度
@符号表示什么意思?
许多小部件或者容器仅仅需要在xml文件中出现,而不需要在java代码中出现,比如一个静态的文本标签(TextView)通常情况下只需要在布局中引用就可以了。你想在java代码引用的话,没有必要使用它的名字等等,只需要id即可。
使用@+id/...作为id的值是很方便的。这里的”...”表示小部件对应的本地的一个唯一不重复的名字。在上面的xml布局文件中。@+id/button 就表示这个button小部件
那么如何把这些id跟java代码联系起来呢?如何来实现?
假如,兄弟你十分艰辛的绘制了一个android的布局,命名为snicklefritz.xml,存放在res/layout文件夹下。接下来,你就要通过代码,来让你的activity按照你这个layout布局。难吗?不。。所有你要做的就是在 onCreate()方法中添加一行代码。
setContentView() 我们之前已经使用过了
android内置的这些View视图,只要被你设计到布局的xml文件中去,那么系统就会自动在R.java文件中建立索引。(如果在eclipse看不到变化,可以选中项目,右键选择refresh)这个R文件,是随着你的项目,自动由android为你提供的。不需要没问手动修改。
只要你在res/layout文件夹定义了layout文件。那么都会被R建立索引。你可以通过
R.layout.xxx的方式来引用这个xml文件哦
同样,既然你定义了小部件在布局文件中,并给它赋予了id。R也会建立索引。要想访问的话,我们只需要简单的通过
findViewById(int id)这个方法就可以了。返回值类型是一个View,根据具体情况,需要进行类型转换哦
6 使用各种基本的小部件(Widget)
在android中,所有可见的都是View视图。它在
这里。。。
但是android中又提供了一个概念:部件(Widget)。
所有部件都是在android.widget包中
这些部件间接或直接的继承自View
可以看到,widget中提供了我们常见的UI元素。
那么,我们来学习下这些ui元素吧
各种文本标签(TextView)
TextView 小部件,用于显示文本
文本小部件,拥有的属性简单介绍如下
l android:typeface :设置文本的字体
l android:textstyle: 设置文本的样式:粗体,斜体等
l android:textColor: 设置文本的颜色,使用RGB的格式如:#FF0000
对应的就是
显示图片的小部件
Android中提供了两种小部件用于查看图片或内嵌图片在Activity中去。
Imageview和ImageButton
使用这2个部件的时候,都需要在xml文件中定义android:src属性,确定它所要显示的图片的位置。当然,一般都会关联到一个drawable资源。我们现在只要把drawable理解为:项目中用到的所有本地图片,我们都会放在res/drawable文件夹下,然后通过R的方式来引用。
ImageButton,是ImageView的子类。兼具图片视图和按钮的功能。
下面看下APIDemo中提供的ImageView的例子:
界面如下
如果想进行文本输入,我们使用EditeView,它是TextView的子类
除了从TextView继承过来的属性,文本编辑框,也有属于自己的好用的属性
l android:autoText: 设置文本输入框是否具有自动完成的功能
l android:capitalize: 设置首字母是否是首选的字符
l android:digits:配置输入框可以既接受的小数点数目
l android:singleLine:控制是否是单行输入
同时,也可以配置更多特色的属性,比如可以通过android:numeric属性,设置只能输入数字,android:password设置输入的是密码, android:phonenum设置输入的是电话号码等等。。。当然,如果你想创建自己的输入设置,比如邮编,身份证号码等等,只需要实现
InputMethod这个接口,然后在EditeView中配置:android:inputMehtod即可
下面是个小例子:
如果你希望在输入文本的时候,能有自动补齐的提示功能的话,你可以选择 AutoCompleteTextView这个部件。后木棉我们还会提到。
复选按钮:CheckBox
典型的选择按钮,有两种状态:checked,unchecked.
在android中提供了CheckBox小部件。它可以显示文本,然后被选择判断。
在java代码中,你可以调用到:
l isChecked() 去判断这个checkbox是否被选中
l setChecked() 设置checkbox被选中
l toggle() ,根据状态来选择
类似于button,你也可以生成一个监听器对象,来注册并是这个checkbox的状态被监听。
我们使用 OnCheckedChangeListener。
下面的例子来演示checkbox的事件监听的
代码很简答,不做解释了
下面是RadioButton,单选按钮
我们可以使用RadioButton作为单选。
跟CheckBox一样,RadioButton也是继承自 CompounButton这个类,而CompounButton则继承自TextView。因此它也有TextView的常规属性
通常,我们需要把我们的radiobutton放在一个RadioGroup组中去。不然起不到相互排斥的作用。
我们可以在java代码中如下调用:
l check() 检查是否被选中,通过id 比如
group.check(R.id.rb1)
l clearCheck() 清除选中状态
l getCheckedRadioButtonId() 获得被选中的单选按钮的id 。如果没有没选中,则返回 “-1”
比如:
这些都是View视图
所有的小部件,包括刚才看到的,以及没有看到的,都是继承自View这个类。
下面列出一些可能会用到的属性
1: 控制焦点序列的属性
l android:nextFoucusDown
l android:nextFocusleft
l android:nextFocusRight
l android:nextFocusUp
2: android:visibility 控制小部件是否可见
3:android:background 设置背景色
其他一些有用的方法
你可以通过设置setEnabled()方法,来设置一个小部件是否可以被获得。而调用isEnabled()方法来判断是否可以获得
我们可以通过requestFocus()方法,来主动让某一个小部件获得焦点,也可以调用isFocus() 方法,来判断是否获得焦点
还可以:
l getParent()方法来获得上层部件或容器
l getParentofTtpe()根据特定类系那个来找到某一个部件的上层部件
比如: 通过radiobutton 找到radiogroup
l findViewById()这个不用说了吧,一直在用
l getRootView() 获得Activity的最初的视图。比如 setContentView()中设置的那个View就是了