本文为个人读书笔记,大部分为书中内容摘要。仅供记录和分享学习中遇到的需要留意的问题,如有相关版权问题请及时通知作者。
Android的UI界面
Android中,所有的UI界面都是由View类和Viewgroup类及其子类组合而成的。View类是所有UI组件的基类,它是Android平台中用户界面体现的基础单位拟,提供了UI对象的完整实现;Viewgroup类是容纳这些UI组件的容器,提供了布局架构,ViewGroup本身也包含View类的子类。
View类是一个数据体,它的数据体,它的属性存储了用于屏幕上一块矩形区域的布局参数及内容,并负责它所辖的这个矩形区域之中所有测量、布局、焦点转换、卷洞以及按键/触摸手势的处理。最为一个用户界面对象,View同时也担任着用户交互关键点以及交互事件接受者的对象。
使用XML布局文件控制UI界面
两个关键步骤:
1、在Android程序的res/layout目录下编写XML布局文件。名字符合Java命名规则。R.java会自动收录该布局。
2、在Activity中使用setContentView(R.java.布局文件名)显示XML文件中布局的内容
在Java代码中控制UI界面--不推荐
在Android中,支持Java Swing那样完全通过代码控制UI界面,也就是所有的UI组件都通过new关键字创建出来,然后将这些UI组件添加到布局管理器中,实现用户界面。
在代码中控制UI界面3个关键步骤:
1、创建布局管理器,设置布局管理器的属性
2、创建具体的组件,设置组件的布局和属性
3、将创建的具体组件添加到布局管理器中
使用XML和Java代码混合控制UI界面
把变化小、行为比较固定的组件放在XML布局文件中,把变化较多、行为控制比较复杂的组件交给Java代码来管理。
开发自定义的View
3个步骤:
1、创建一个集成android.view.View类的View类,重写构造方法
2、根据需要重写相应的方法。
3、在项目的活动中,创建并实例化自定义View类,并将其添加到布局管理器中即可。
文本类组件
TextView文本框
用于在屏幕上显示文本,可以显示单行、多行、带图像的文本。
两种添加方式:
1、XML布局文件中使用<TextView>添加,推荐
2、new关键字创建
TextView支持的XML属性
XML属性 | 描述 |
android:autoLink |
是否将指定格式的文本转换为可单击的超链接形式
属性值:none、web、email、phone、map、all
|
android:drawableBottom
android:drawableLeft
android:drawableRight
android:drawableTop
|
在文本框内文本的底端、左侧、右侧、顶端绘制指定图像
图像可以是放在res/drawable下的图片,通过@drawable/文件名(不带扩展名)设置
|
android:gravity |
设置文本对齐方式,属性:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip_horizontal。
可同时指定多个属性,用“|”分隔。
|
android:hint | 文本框为空时默认的提示文本 |
android:inputType | 用于指定文本框显示内容的文本类型,属性:textPassword、textEmailAddress、phone、date,可多个,“|”分隔。 |
android:singleLine | 是否单行模式。 |
android:text | 显示的温恩内容,可在该属性指定,也可以通过string.xml文件中定义文本常量的方式指定 |
android:textColor | 设置文本颜色,属性值可以是#rgb、#argb、#rrggbb或#aarrggbb格式颜色值 |
android:textSize | 文本字体大小,单位px/pt/sp/in等 |
android:width
android:height
| 文本宽和高,单位px |
EditText编辑框
在屏幕上显示文本输入框
两种添加方式:
1、XML布局文件,使用<EditText / >,推荐
2、在Java文件中,new创建
EditText是TextView类的子类,所以TextView的XML属性同样适用于EditText。
需要注意android:inputType属性,在EditText中,通过指定该属性可以帮助输入法显示合适的类型。
AutoCompleteTextView自动提示组件
两种添加方式:
1、XML中,<AutoCompleteTextView>,推荐
2、Java文件中,new创建
AutoCompleteTextView继承自EditText,支持EditText的属性。
AutoCompleteTextView支持的其他XML属性
XML属性 | 描述 |
android:completionHint | 为弹出的下拉菜单指定提示标题 |
android:completionThreshold | 指定用户至少输入几个字符显示提示 |
android:dropDownHeight | 指定下拉菜单的高度 |
android:dropDownHorizontalOffset | 指定下拉菜单与文本之间的水平偏移,默认与文本框左对齐 |
android:dropDownVerticalOffset | 指定下拉菜单与文本之间的垂直偏移,默认紧跟文本 |
android:dropDownWidth | 指定下拉菜单宽度 |
android:popupBackground | 指定下拉菜单背景 |
按钮类组件
Button按钮
两种添加方式:
1、XML布局文件<Button>,推荐
2、Java文件中new
按钮添加后,需要为按钮添加单击事件监听。Android提供了两种添加方法:
1、在Java代码中完成,例如在Activity的onCreate()方法中完成
import adnroid.view.View.OnClickListener;
import android.widget.Button;
Button login=(Button)findViewById(R.id.login);
login.setOnClickListener(new OnClickListener(){
@override
public void onClick(View v){
//要执行的动作
}
});
2、在Activity中编写一个包含View类型参数的方法,把要触发的动作代码放在该方法中。在布局文件中,通过android:onClick属性指定对应的方法名实现。
Activity:
public void myClick(View view){
//要执行的动作
}
Layout:
android:onClick="myClick"
ImageButton图片按钮
与Button使用方法相同,由ImageButton定义,可以指定android:src属性,设置要显示的图片。
同样需要添加单击监听事件。
ToggleButton特殊按钮
两种添加方式:
1、XML文件中<ToggleButton>,推荐
2、Java文件中,new
ToggleButton继承Button,支持Button的属性
ToggleButton支持的其他属性
XML属性 | 描述 |
android:textOn | 设置控件在选中时显示的文本 |
android:textOff | 设置控件在未选中时显示的文本 |
在Java源文件中可以使用ToggleButton对象的getTextOn方法获取ToggleButton组件选中时显示的文本,使用ToggleButton对象的getTextOff方法获取ToggleButton组件未选中是显示的文本,使用ToggleButton对象的getText方法获取ToggleButton获取当前显示的文本。
选择类组件
单选按钮和复选按钮都继承普通按钮,都可以直接使用普通按钮支持的各种属性和方法。与普通按钮不同之处在于提供了可选中功能。
RadioButton单选钮
默认情况显示一个圆形图标。
两种添加方式:
1、XML布局文件中,<RadioButton>
2、Java文件中,new
android:checked指定选中状态
通常情况下,RadioButton组件需要与RadioGroup组件一起使用,组成一个单选按钮组。
<RadioGroup
android:id=""
android:orientation=""
android:layout_width=""
android:layout_heigth="">
多个RadioButton组件
</RadioGroup>
在屏幕中提阿尼啊单选按钮组后,还需要获取单选按钮组中选中项的值。在获取单选按钮组中选中项的值是,存在两种情况:
1、改变单选按钮组的值时获取
首先获取单选按钮组,然后为其添加OnCheckedChangeListener监听事件,在其onCheckedChanged()方法中根据参数checkedId获取被选中的单选按钮,然后通过其getText()方法中根据参数checkedId获取被选中的单选按钮,然后通过其getText()方法获取该单选按钮对应的值。
RadioGroup sex=(RadioGroup)findViewById(R.id.radioGroup1);
sex.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group,int checkedId){
RadioButton r=(RadioButton)findViewById(checkedId);
r.getText();
}
});
2、单击其他按钮时获取
首先需要在该按钮的单击事件监听的onClick()方法中,通过for循环语句遍历当前单选按钮组,并根据被遍历到的单选按钮的isChecked()方法判断该按钮是否被选中,如果被选中,通过单选按钮的getText()方法获取对应的值。
final RadioGroup sex=(RadioGroup)findViewById(R.id.radioGroup);
Button button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
for(int i=0;i<sex.getChildCount();i++){
RadioButton r=(RadioButton)sex.getChildAt(i);
if(r.isChecked()){
r.getText();
break;
}
}
}
});
CheckBox复选框组件
CheckBox是Button的子类,可以直接使用Button支持的各种属性。
两种添加方式:
1、XML布局文件,<CheckBox>,推荐
2、Java文件中,new
复选框可以选中多项,为了确定用户是否选择了某一项,还需要为每一个选项添加setOnCheckedChangeListener事件监听。
final CheckBox like1=(CheckBox)findViewById(R.id.like1);
like1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){
if(like1.isChecked()){
like1.getText();
}
}
});
列表类组件
ListView列表视图
以垂直列表的形式列出需要显示的列表项。
两种添加方式:
1、直接使用ListView组件创建
XML布局文件中<ListView>
ListView支持的常用XML属性
XML属性 | 描述 |
android:divider | 为列表视图设置分隔条,可以使用颜色或drawable资源 |
android:dividerHeight | 设置分隔条的高度 |
android:entries | 通过数组资源为ListView指定列表项 |
android:footerDividersEnabled | 设置是否在footer View之前绘制分隔条,默认true。使用该属性时,需要通过ListView组件提供的addFooterView()方法为ListView设置footer View |
android:headerDividersEnabled | 设置是否在header View之前绘制分隔条,默true。使用该属性时,需要通过ListView组件提供的addHeaderView()方法为ListView设置header View |
设置选项内容:
如果ListView在布局文件中没有为其指定要显示的列表项,也可以通过为其设置Adapter来指定需要显示的列表项。通过Adapter来为ListView指定要显示的列表项,可以分为两个步骤:
( 1)创建Adapter对象。对于纯文字的列表项,通常使用ArrayAdapter对象。创建ArrayAdapter对象通常可以有两种情况:
①通过数组资源文件创建
通过数组资源文件创建适配器,需要使用ArrayAdapter类的createFromResource()方法
ArrayAdapter<CharSequence> adapter=ArrayAdapter.createFromResource(
this,R.array.ctype,android.R.layout.simple_list_item_checked);
②在Java文件中使用字符串数组创建
在Java文件中使用字符数组创建适配器,首先需要创建一个一维的字符串数组,用于保存要显示的列表项,然后使用ArrayAdapter类的构造方法ArrayAdapter(Context context,int TextViewResourceId,T [ ] objects)创建一个ArrayAdapter类的对象
String[ ] ctype=new String [ ]{ “”,“”,“”};
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked,ctype);
在创建ArrayAdapter对象时,需要指定列表项的外观形式:
simple_list_item_1:每个列表项都是一个普通文本
simple_list_item_2:每个列表项都是一个普通文本(字体略大)
simple_list_item_checked:每个列表项都有一个已勾选的列表项
simple_list_item_multiple_choice:每个列表项都是带多选框的文本
simple_list_item_single_choice:每个列表项都是带单选按钮的文本
(2)将创建的适配器对象与ListView相关联,可以通过ListView对象的setAdapter()方法实现
listView.setAdapter(adapter);【5.14】
2、Activity继承ListActivity实现
如果程序的窗口仅仅需要显示一个列表,则可以直接让Activity继承ListActivity来实现。继承了ListActivity的类中无须调用setContentView()方法来显示页面,可以直接为其设置适配器,从而显示一个列表。【5.15】
Spinner列表选择框
相当于在网页中常见的下拉列表框,通常用于提供一系列可选择的列表项,供用户进行选择。
两种添加方法:
1、XML布局文件<Spinner>,推荐
<spinner
android:promt="@string/info"
android:entries="array/数组名称“/>
android:entries为可选属性,用于指定列表项,如果在布局文件中不指定该属性,可以在Java代码中通过为其指定适配器的方式指定;android:promt也是可选属性,指定列表选择框的标题
2、Java文件中,new
通常情况下,如果列表选择框中要显示的列表项是可知的,那么我们会将其保存在数组资源文件中,然后通过数组资源来为列表选择框指定列表项。这样就可以在不编写Java代码的情况下实现一个列表选择框。【5.16】
在布局文件中添加一个<spinner>组件,并为其指定android:entries
在res/value目录的strings.xml资源文件中添加之前使用的数组
在屏幕上添加列表选择框后,可以使用列表选择框的getSelectItem()方法获取列表选择框的选中值。
添加列表选择框后,如果需要在用户选择不同的列表项后,执行相应的处理,则可以为该列表选择框添加OnItemSelectedListener时间监听。
在使用列表选择框时,如果不在布局文件中直接为其指定要显示的列表框,也可以通过为其指定适配器的方式指定。分为三个步骤:
1、创建一个适配器对象,通常使用ArrayAdapter类。两种情况:通过数组资源文件创建,在Java文件中使用字符串数组创建。
2、为适配器设置列表框下拉时的选项样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
3、将适配器与选择列表框关联
spinner.setAdapter(adapter);
图像类组件
ImageView图像视图
用于在屏幕中显示任何的Drawable对象,通常用来显示图片。
两种添加方式:
1、XML布局文件,<ImageView>标记,推荐
2、Java文件中,new
使用ImageView显示图像时,通常将图片放在res/drawable目录中
ImageView支持的XML属性
XML属性 | 描述 |
android:adjustViewBounds | 设置ImageView是否调整自己的边界来保持所显示图片的长宽比 |
android:maxHeight
android:maxWidth
| ImageView的最大高度和宽度,需要设置android:adjustViewBounds属性为true |
android:scaleType |
设置所显示的图片如何缩放或移动以适应ImageView的大小。
matrix,使用matrix方式缩放;
fixXY,对图片横向、纵向独立缩放、使图片完全适应ImageView,纵横比可能改变;
fitStart,保持纵横比缩放图片,直到该图片能完全显示,位于左上
fitCenter,保持纵横比缩放,直到该图片能完全显示,位于中央
fitEnd,保持纵横比缩放,直到图片能完全显示,位于右下角
center,放在中间,不进行缩放
centerCrop,保持纵横比缩放,使图片完全覆盖ImageView
centerInside,保持纵横比,使ImageView能完全显示该图片
|
android:src | 设置Drawable对象的id |
android:tint | 为图片着色,可以是#rgb、#argb、#rrggbb、#aarrggbb颜色值 |
Gallery画廊视图组件
按水平方式显示能容,可以直接拖动图片移动浏览。一般用来浏览图片,被选中的选项位于中间,可以相应时间显示信息。
首先需要在屏幕上添加Gallery组件,通常在XML布局文件中使用<Gallery>标记添加
Gallery支持的XML属性
XML属性 | 描述 |
android:animationDuration | 设置列表项切换时的动画持续时间 |
android:gravity | 设置对齐方式 |
android:spacing | 设置列表项之间的间距 |
android:unselectedAlpha | 设置没有选中的列表项的透明度 |
使用Gallery视图,需要使用Adapter提供要显示的数据,通常使用BaseAdapter类为Gallery组件提供数据。步骤:
1、在xml中添加Gallery组件
2、在MainActivity中定义一个用于保存要显示图片ID的数组
3、在主活动的的onCreate()方法中,获取在布局文件中添加的Gallery视图
Gallery gallery=(Gallery)findViewById(R.id.gallery1);
4、在res/values目录的strings.xml文件中定义一个styleable对象,用于组合多个属性。
5、创建BaseAdapter类的对象,并重写其中的getView()、getItemID()、getItem()和getCount()方法。
6、将步骤5创建的适配器与Gallery关联,并且让中间的图片选中,为了在用户单击某张图片时显示对应位置,需要为Gallery添加单击事件监听
ImageSwitcher图像切换器
功能类似windows下的图片查看器。
使用ImageSwitch而时,必须实现ViewSwitcher.ViewFactory接口,并通过makeView()方法来创建用于显示图片的ImageView对象。makeView()方法返回一个显示图片的ImageView。setImageResource()方法,指定要在ImageSwitcher中显示的图片资源