探索Android应用开发(四)

android

android

学习目标:

  1. 重构应用代码,剥离UI和业务逻辑

学习目的:

  1. 掌握从配置文件设置UI的方法

学习收获:

定义布局有两种方式:在XML中声明UI元素或者运行时指明布局元素。每一个布局文件都必须包含一个root元素,它必须是View或者ViewGroup对象。

任何一个View对象都有一个整型的ID来关联它。当应用被编译以后,ID就会当做是整数。但那时在布局xml文件中,ID是被赋予一个字符串的。类似“android:id=”@+id/my_button””的表达式中,字符串开始处的@符号表示了XML解析器要解析并展开ID字符串的剩余部分,并把它作为一个ID资源。+符号意味着这是一个新的资源名称,必须要创建并且添加到我们资源中去(即R.java文件)。当引用一个Android资源ID时,你不必需要+符号,但是必须加上android的包命名空间,例如“android:id=”@android:id/empty””。

Menu是应用程序的重要部分。他们提供了熟悉的界面,提供应用程序的功能和设置。Android提供三种基础类型的应用程序Menu,分别是Options Menu、Context Menu和Submenu。

Options Menu,Activity的主要menu 选项的集合,在按下设备MENU键时出现。在Option Menu中是两组menu items,分别是Icon Menu和Expanded Menu。Icon Menu就是在按下MENU键时,出现在屏幕底部的选项集合。它最多提供六个menu item。它们也是唯一的支持icons的menu item,也是唯一不支持checkbox和radio按钮的menu item。Expend Menu是垂直的item的列表,在Icon Menu的”More” menu中出现。

按下设备的MENU键时,Options Menu就会打开。打开时,Icon Menu会展现,它有头六个menu item。如果有超过六个的item增加到了Options Menu,就会通过MORE展现。此时Expended Menu自动出现。

当Menu第一次打开时,Android系统就会调用Activity的onCreateOptionsMenu方法。在你的Activity中Override这个方法。你可以通过一个定义的XML的menu 资源来填充menu,也可以通过为每个menu的item调用add方法。你可以为每个MenuItem设置额外的属性,例如icon、键盘快捷键、itent和其他item上的设置。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.add(Menu.NONE, CREATE_ID, Menu.NONE, R.string.create_item);
    menu.add(Menu.NONE, DELETE_ID, Menu.NONE, R.string.delete_item);
    return true;
}

通常,你想要使用一个来接收itemId参数,这是唯一的整数允许你在callback时,识别item。当有从Options Menu上选中某个menu item时,你会通过Activity的onOptionsItemSelected来接收callback。这个callback传给你选中的MenuItem。

和Android UI布局类似,你可以在XML中定义menu。这使得你的应用程序代码更加清晰,把更多的界面设计移动到XML中,这样也更加可视化。

在工程的res路径下创建一个文件夹menu,这就是你应该保存所有定义应用menu的XML文件的地方。在一个menu的XML布局中,会有三类有效的元素:menu、group和item。

新的代码要把视图的内容从业务代码中移除,因此首先在res目录下新建menu文件夹,然后新建一个命名为options_menu的xml文件,如下所示:

与之相对,更新后的JAVA代码如下:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = this.getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);
    return true;
}

Leave a comment

Your comment