Android UI界面编程概览
本文主要对Android UI 用户界面开放的一些基本概念,均不做深入讲解,但可以快速浏览Android开放经常涉及到的一些基本概念和要素。
?
?
一、? 界面元素
1.????????? 窗口:Activity
应用程序中每个屏幕显示都通过继承和扩展基类Activity实现
分类:基本Activity,带内容的Activity(如ListActivity)
2.????????? 对话框:Dialog
一种显示于Activity之上的界面元素,由Activity管理,用于显示一些临时信息和功能,它比Activity开销小
1)???????? 常用对话框:
AlertDialog:信息对话框
DatePickerDialog,TimePickerDialog:时间日期选择对话框
ProgressDialog:进度对话框
还可以设置对话框内容为我们自定义的View
2)???????? 相关函数:
onCreateDialog():创建对话框的实现
showDialog():需要显示的时候调用
onPrepareDialog():更改已有对话框时调用
3.????????? 菜单:Menu
一种显示于Activity之上的界面元素,由Activity管理,用于提供用户一些额外的选项和设置
1)???????? 常用菜单:
Options Menu:按Menu键时从屏幕底部滑出的菜单
Context Menu:用户通过在按件上长按调出它
Submenu:用于给菜单分类,可被添加到其它菜单上,不能添加到子菜单上
2)???????? 相关函数:
onCreateOptionMenu():创建菜单 (onCreateContextMenu…)
onOptionsItemSelected():处理菜单项的单击事件
onPrepareOptionsMenu():动态更新
4.??????? 可视化控件:View
View是可视化控件的基类
1)??????? 常用控件:
TextView, ImageView
Button, CheckBox, RadioButton, ImageButton, ToggleButton
AnalogClock, DigitalClock
EditText, List…
2)??????? 数据绑定:adapter
adapter将控件(如List, GridView)和复杂数据(如数据,键表)绑定起来
5.??????? 其它界面元素
标题栏
?
?
二、? layout布局的实现
设置控件在屏幕上如何排布
1.??????? LinearLayout:线性的布局方式
最常用,上下或左右的添加控件
2.??????? GridView:网格布局
控件按照顺序依次填到每个格子里就好了,使界面很整齐
3.??????? TableLayout:表格布局
以行列形式管理子控件,每行为一个TableRow,TableRow可添加子控件
4.??????? AbsoluteLayout:绝对坐标布局
可以让子元素指定准确的x/y坐标值,并显示在屏幕上。(0, 0)为左上角。
AbsoluteLayout没有页边框,允许元素之间互相重叠(尽管不推荐)。
不推荐使用,因为其在不同的设备上可能不能很好地工作。
5.??????? RelativeLayout:相对坐标布局
控件可指定他们相对于其它元素或父元素的位置(通过ID指定)。
可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。
6.??????? FrameLayout:单帧布局
所有的子元素将会固定在屏幕的左上角,后一个子元素将会直接在前一个子元素之上进行覆盖填充
?
?
三、? 事件响应
1.????????? 用注册回调函数的方式响应事件
2.????????? 如果没被任何一个View处理,则由Activity处理
3.????????? 常用事件处理
1)???????? onKeyDown()
2)???????? onKeyUp()
3)???????? onTrackballEvent()
4)???????? onTouchEvent()
?
?
四、? 应用软件代码目录结构
1.??????? res:资源
资源是在代码中使用到的并且在编译时被打包进您的应用程序的附加文件
在代码中通过R类调用(R类自动生成,形如R.string.title)
1)??????? layout:存放布局用的xml文件
a)??????? 布局就像容器,里面可以装下很多控件,每个控件又有布局,字体设定,
如字体大小在layout的xml里使用:
Android:textAppearance=”?android:attr/textAppearanceSmall”
b)??????? 默认的布局文件main.xml
2)???????? drawable:存放图片图标
3)???????? values:存放常量的xml文件(如字串)
2.????????? src:代码
3.????????? AndroidManifest.xml
包含应用程序的基本信息,有哪些组件,哪些资源
1)???????? 应用程序的java包名
2)???????? 应用程序中所含组件(Activity, Service, BroadcastReceiver, ContentProvider)
3)???????? 应用程序调用其它程序时的权限
4)???????? 应用程序被其它程序调用时对其它程序的权限要求
5)???????? 使用Android API的最低版本
6)???????? 应用程序依赖的库
?
五、? 国际化的支持(多语言)
1.??????? 在系统中如何设置本地语言
桌面->settings->Local & text->Select locale->Chinese(China)
2.??????? 在程序中如何加入多语言支持
res/value中是默认的字体
把它复制一份成为res/value-zh-rCN文件夹,然后把其中文字改为简体中文
3.??????? 在不改变系统设置的前提前,测试当前应用对某一语言的支持
import java.util.Local; // 引入相关类
import android.util.DisplayMetrics;
在OnCreate函数中加入以下本地化设置
Resources res = getResources();
Configuration conf = res.getConfiguration();
conf.locale = Locale.SIMPLIFIED_CHINESE;? // 设置为简体中文
DisplayMetrics dm = res.getDisplayMetrics();
res.updateConfiguration(conf,dm);
编译后再运行程序时,读取的字串就是res/value-zh-rCN目录中strings.xml里的文字了
?
六、? 常见问题及解决方法
1.??????? android.app.Application
创建一个属于你自己的android.app.Application的子类,然后在manifest中申明一下这个类,这是android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态
2.??????? 用别人写的java文件改出自己的,R.xx报错
由于资源找不对,要把它的res文件和AndroidManifest.xml内容也做相应替换,注意xml里边要改成自己的类名
3.??????? android中可以使用java中的类吗
一般数据结构使用它,而界面使用android自带的界面元素
4.??????? layout中的控件与程序中控件的关系
平等的,layout中的控件用R.id.xxx得到
5.??????? 布局冲突
requestWindowFeature与setContentView冲突
?
七、? android中几个重要的包(建议逐个熟悉,你就能熟能生巧了!)
android.app :提供高层的程序模型、提供基本的运行环境
android.content :包含各种的对设备上的数据进行访问和发布的类
android.database :通过内容提供者浏览和操作数据库
android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上.
android.location :定位和相关服务的类
android.media :提供一些类管理多种音频、视频的媒体接口
android.net :提供帮助网络访问的类,超过通常的java.net.* 接口
android.os :提供了系统服务、消息传输、IPC 机制
android.opengl :提供OpenGL 的工具
android.provider :提供类访问Android 的内容提供者
android.telephony :提供与拨打电话相关的API 交互
android.view :提供基础的用户界面接口框架
android.util :涉及工具性的方法,例如时间日期的操作
android.webkit :默认浏览器操作接口
android.widget :包含各种UI 元素(大部分是可见的)在应用程序的屏幕中使用