常用控件的使用
TextView
- 它主要用来显示一段文本
- android:gravity:用来指定文字的对齐方式,可以用“|”来同时指定多个值
- android:textSize:用来指定文字的大小
- android:textColor:用来指定文字的颜色
Button
- 实现Button点击事件有三种方法
- 内部类实现
- 实现接口
- 在XML代码中使用OnClick属性
EditText
- 它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理
- android:hint:用来指定一段提示性文字
- android:maxLines:指定了EditText的最大行数
ImageView
- 用于在界面上展示图片的一个控件
- 使用android:src属性给ImageView指定一张图片
ProgressBar
- 用于在界面显示一个进度条
- Android控件的可见属性。 所有的 Android控件都具有这个属性, 可以通过android:visibility进行指定
- visible 表示控件是可见的,这个值是默认值
- invisible 表示控件不可见,但是它仍然占据着原来的位置和大小, 可以理解成控件变成透明状态了
- gone 则表示控件不仅不可见,而且不再占用任何屏幕空间
- 通过 style 属性可以将它指定成不同的样式
- android:max 属性给进度条设置一个最大值
AlertDialog
- AlertDialog 可以在当前的界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此一般 AlertDialog 都是用于提示一些非常重要的内容或者警告信息
首先通过 AlertDialog.Builder 创建出一个 AlertDialog 的实例
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
setPositiveButton()方法为对话框设置确定按钮的点击事件
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } });
调用 setNegativeButton()方法设置取消按钮的点击事件
dialog.setNegativeButton("Cancel", new DialogInterfaceOnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } });
ProgressDialog
- ProgressDialog 和 AlertDialog 有点类似,都可以在界面上弹出一个对话框,都能够屏蔽掉其他控件的交互能力。不同的是,ProgressDialog 会在对话框中显示一个进度条,一般是用于表示当前操作比较耗时,让用户耐心地等待。
- 如果在 setCancelable()中传入了 false,表示 ProgressDialog 是不能通过 Back键取消掉的,当数据加载完成后必须要调用 ProgressDialog 的dismiss()方法来关闭对话框,否则 ProgressDialog 将会一直存在。
详解四种布局
LinearLayout
- LinearLayout 又称作线性布局,是一种非常常用的布局
- android:orientation:指定LinearLayout控件的排列方向,默认为horizontal(水平)
- 如果 LinearLayout 的排列方向是 horizontal,内部的控件就绝对不能将
宽度指定为 match_parent,因为这样的话单独一个控件就会将整个水平方向占满,其他的控件就没有可放置的位置了。 - android:layout_gravity:用于指定控件在布局中的对齐方式;当LinearLayout 的排列方向是 horizontal 时,只有垂直方向上的对齐方式才会生效
RelativeLayout
- RelativeLayout 又称作相对布局,也是一种非常常用的布局
- android:layout_above 属性可以让一个控件位于另一个控件的上方
- android:layout_below 表示让一个控件位于另一个控件的下方
- android:layout_toLeftOf 表示让一个控件位于另一个控件的左侧
- android:layout_toRightOf 表示让一个控件位于另一个控件的右侧
- android:layout_alignLeft 表示让一个控件的左边缘和另一个控件的左边缘对齐
- android:layout_alignRight 表示让一个控件的右边缘和另一个控件的右边缘对齐
- android:layout_alignTop 和 android:layout_alignBottom相同的原理
FrameLayout
- 这种布局没有任何的定位方式,所有的控件都会摆放在布局的左上角
TableLayout
- TableLayout 允许我们使用表格的方式来排列控件,这种布局也不是很常用
- 在 TableLayout 中每加入一个 TableRow 就表示在表格中添加了一行
- 在 TableRow中每加入一个控件,就表示在该行中加入了一列
- TableRow 中的控件是不能指定宽度的
- android:inputType 属性的值指定为 textPassword,把 EditText 变为密码输入框
- android:stretchColumns 属性:它允许将 TableLayout 中的某一列进行拉伸,以达到自动适应屏幕宽度的作用
创建自定义控件
- 所有的控件都是直接或间接继承自View的,所用的所有布局都是直接或间接继承自ViewGroup的
- ViewGroup则是一种特殊的View,它可以包含很多的子View和子ViewGroup,是一个用于放置布局和控件的存储
引入布局
include可以引入布局
<include layout = "@layout/title"/>
创建自定义控件
- 引入布局的技巧解决了重复编写布局代码的问题,但是如果布局文件中有控件需要设置点击事件,就需要重复编写点击事件,这个问题可以通过创建自定义布局来解决。
首先新建TitleLayout继承LinearLayout
public class TitleLayout extends LinearLayout{}
添加自定义控件
<com.example.uicustomviews.TitleLayout android:layout_width = "match_parent" android:layout_height = "match_parent" ></com.example.uicustomviews.TitleLayout>
- 为自定义控件添加点击事件
最常用和最难用的控件—ListView
- ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据会滚动到屏幕外
ListView的简单用法
- 数据无法直接传递到ListView的,需要借助适配器来完成
- ArrayAdapter 是其中一个适配器实现类
- ArrayAdapter的构造器需要依次传入当前上下文、ListView子项布局的id、以及适配器的数据。
- 最后需要调用ListView的setAdapter()方法,将构建好的适配器对象传递进去。
提升ListView的效率
getView()中收一个参数convertView,这个参数用于将之前加载好的布局进行缓存,以便之后可以重用。
View view; if(convertView == null){ view = LayoutInflater.from(getContext)).inflate(resourceId,null); } else { view = convertView; }
- 可以创建一个内部类ViewHolder,用于对控件的实例进行缓存。
ListView的点击事件
listView.setOnItemClickListener(new OnItemClickListener(){
@override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
Fruit fruit = fruitList.get(position);
Toast.makeText(Mainactivity.this,fruit.getName(),Toast.LENGTH_SH ORT).show();
}
)};
单位和尺寸
- dp是密度无关像素的意思,它在不同密度的屏幕中的显示比例将保持一致
- sp是可伸缩像素的意思,它采用了和dp相同的设计理念,解决了文字大小的问题
- 在编写Android程序的时候,尽量将控件或布局的大小指定成match_parent或wrap_content,如果必须指定一个固定值,则使用dp来做单位,指定文字大小用sp作为单位。
编写界面的最佳实践
制作Nine-Patch图片
- Nine-Patch:它是一种被特殊处理过的png图片,能够指定哪些区域可以被拉伸而哪些区域不可以。
- Android sdk目录下tools文件夹,找到draw9patch.bat文件是用来制作Nine-Patch图片的