Android 界面开发

#移动开发 #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. 其它界面元素
标题栏

二、布局的实现
设置控件在屏幕上如何排布

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 文件
  1. 布局就像容器,里面可以装下很多控件,每个控件又有布局,字体设定, 如字体大小在 layout 的 xml 里使用: Android:textAppearance=”?android:attr/textAppearanceSmall”

  2. 默认的布局文件 main.xml

  1. drawable:存放图片图标

  2. 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 元素(大部分是可见的)在应用程序的屏幕中使用