1. 话说 不是前端或者学设计的程序员大都美感较差,因为大都关注的是功能的实现,我觉得学点UI对于程序员以后找女朋友是一件很重要也很紧急的事儿。
2.那android里有哪些脸谱呢,因为有很多,我就不一一介绍了,谈一些常用的UI控件吧,
TextView :这是个文本框,用layout_width,layout_height 设置这个相对于父布局的大小 有match_parent 沾满全部 wrap_content 当前空间大小所占的内容
EditView :编辑框 , 用来输入内容的 android:hint 提示文本 maxLines="2" 输入内容过多时,最大显示行数 两行 审美的小细节 inputType 设置文本显示的种类 比如密码,邮箱之类的
Button : 按钮 ,
ImageView :图片, src 指定图片路径
ProgressBar : 进度条 代码中使用 PregressBar 的 getProgress()获取进度条进度信息 setProgress(int) 设置进度信息
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
设置进度条的样式 这个是 横长条的 默认是 圆圈。
AlertDialog :弹出对话框 , new AlertDialog.Builder (Context) 然后设置 Title, Message,成功PositiveButton 失败 NegativeButton 内容 最后要show()一下 和Toast一样。别忘了 还要设置Cancelable(false); 无法通过返回键 来取消当前对话框
ProgressDialog :进度条对话框 , 这里的Cancelable(false)的话 结束之后一定要dismiss()一下
这里有一些公共的属性 比如android:text 显示的文字 android:textSize 文字大小 android:textColor文字颜色等等
dp,sp 前者是与像素无关的单位 后者是描述像素无关的文字单位 因为考虑到设备屏幕大小以及像素的问题才出现了这些单位,好适配现在的只能手机。
3.几种布局格式
LinearLayout :按照某一方向的顺序依次安排空间大小,就好像是学生按学号做座位一样, orientation="vertical" 水平 orientation=“horizontal”垂直
RelativeLayout : 先设定一个位置,这个空间位置可以依赖于父布局的空间进行 控制 居中gravity=“center” 靠左alignParentLeft 靠右.... 可以查看api的xml属性 给第一个设定id,之后的空间可以相对于 设定了id的空间进行位置的布局 android:width="0dp" android:weight="1" 这样把宽度设为0之后可以更好的适配屏幕
TableLayout :表格布局 , layout_span="2" 合并2个单元格 <TableRow> </TableRow> 换行
4. 自定义控件
方法一: 先创建好控件的xml文件 ,在主xml中引入 <include layout="@layout/xxx"> 这样就可以把自己的空间布局引入进来了。
方法二 : 我们要创建一个控件类,初始化函数,将自己写的布局与控件类绑定,LayoutInflater.from(context).inflate(R.layout.xxx,this);
然后我们定义一下 控件上的 点击回调事件,
最后在要展示的xml中引入<com.xxx.xxx.xxx android:layout_... .... ...>就OK了
5.ListVeiw 这是经常要用到的一个控件 既然是控件 所以在代码中还是需要 findViewById() 你懂的, 接着这是用来展示一个数据量比较大的空间 所以需要一个帮手 就是ArrayAdapter 叫做适配器 用来适配列表中每一行的数据,这其实是一种设计模式了,观察者模式,简单的说 就是为一个会随时变化的事物设置一些观察者,而当事物发生变化时,就会被观察者感知 然后去告诉另外一个事物,依据这样的设计模式能够知道 这个观察者类 一定包含了 被通知事件的对象,这里的观察者是ArrayAdapter,它将ListView的对象包含进来,当data发生变化时 就通过notifyDataSetChanged()来通知ListView去进行显示, 但是可能你看代码的时候 会发现是这样的 listView.setAdapter(adapter)会有些绕,但android源码里setAdapter(Adapter) 经过了很多处理之后 ,将listView的对象注册到Adapter中了,如果细究可以查查资料
使用的时候还可以自定义自己的列表布局,在自己定义的Adapter类中将布局引入, 初始化构造方法,获取当前行布局xml的view,然后创建自己的实体类,然后通过findViewById来获取到行布局中的每个控件 通过set方法填充内容 这里主要是重写getView方法 里面通过position 获取到当前的实体对象。
ListView里有一些个优化问题 比方说使用convertView 比方说控件较多的时候 使用setTag() 这个网上也有资料就不细谈了,
6.制作可内容可伸缩的图片 这个在tools的包里有draw9patch.bat,使用方法百度下