Android 入门到精通 (界面编程#2-Menu)
Option Menu:
看看下一段代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class HelloActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
menu.add(0, Menu.FIRST+1, 1, R.string.menu_open);
menu.add(0, Menu.FIRST+2, 2, R.string.menu_edit);
menu.add(0, Menu.FIRST+3, 3, R.string.menu_update);
menu.add(0, Menu.FIRST+4, 4, R.string.menu_close);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
super.onOptionsItemSelected(item);
switch(item.getItemId())
{
case Menu.FIRST + 1:
{
this.setTitle("Open Text!");
break;
}
case Menu.FIRST + 2:
{
this.setTitle("Edit Text!");
break;
}
case Menu.FIRST + 3:
{
this.setTitle("Update Text!");
break;
}
case Menu.FIRST + 4:
{
this.setTitle("Close Text!");
break;
}
}
return true;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
}
}
只需要改写父类Activity的两个函数即可,方便之极。也就是说Android早就为你写好了相关的代码,你只要填一些菜单项,再对每一个菜单项的ItemId编写具体的
操作代码就行了。
Android资源
上述代码中有几行可能对于入门者不好理解
1.添加菜单menu.add(0, Menu.FIRST+1, 1, R.string.menu_open);
menu.add(0, Menu.FIRST+2, 2, R.string.menu_edit);代码中的 R.string.menu_open/menu_edit
这些其实是指资源文件中的ID,映射到具体的资源,这里是映射到字符串资源menu_open, menu_edit,其具体的值可以看res/values/string.xml在这里定义了字符串的值:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloActivity!</string>
<string name="app_name">HelloWorld</string>
<string name="menu_open">Open</string>
<string name="menu_edit">Edit</string>
<string name="menu_update">Update</string>
<string name="menu_close">Close</string>
</resources>
在Android中,Activity显示的布局也可在资源中定义,并且以可视化的方式来操作布局对应的XML文件。可以看res/layout/main.xml这就是一个布局文件,这里指定了这个布局里有哪些界面元素以及如何组织,相对位置,绝对位置等信息。来看看其中内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="MyTest OK yest!"></TextView>
</LinearLayout>
这里就描述了布局为LinearLayout,包含了一个TextView,TextView的值为 MyTest.这个XML文件被编译后,可以使用R.layout.main的ID来从资源中取得。
于是Activity可以用setContentView(R.layout.main)来直接从资源取得布局,来绘制界面元素。
另一类常用资源就是图片
在res/drawable/下面有一些图片,你也可以新加一些图片到这里。然后就可以通过.R.drawable.xxx 的ID来从资源中取得对应的图片。
Context Menu:
上面是手机底部菜单,Android还提供了Context上下文菜单的操作,也相当简单,看如下代码: