软件也要拼脸蛋,UI开发的点点滴滴
2016-04-16 10:15
323 查看
常用控件的使用
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图片的
相关文章推荐
- UI - 视图控制器跳转另一个视图控制器特效总结
- 【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
- (LeetCode 303) Range Sum Query - Immutable
- LeetCode 300. Longest Increasing Subsequence
- HBuilder写的第一个表单文件
- Druid 配置
- UI-UIScrollView
- UI-不常用控件 UIActivityIndicatorView、UIProgressView、UISegmentedControl、UIStepper、UISwitch、UITextView、UIAlertController
- poj 1239 Increasing Sequences dp lis
- UI中一些不常用的控件UIActivityIndicatorView、UIProgressView、UISegmentedControl、UIStepper、UISwitch、UITextView、UIAlertController
- UIAlertViewDelegate 的使用简介
- (LeetCode 191) Number of 1 Bits
- iOS 为UILabel添加长按复制功能
- ConcurrentQueue对列的基本使用方式
- uva 11572 Unique Snowflakes
- 转:树莓派使用命令行开发Arduino
- 添加RequestWindowFeature去除标题崩溃
- UI控件--RecyclerView(2)
- Android UI基础 --基本控件
- UI性能优化详解