4.1 菜单
菜单的设计在人机交互中可以说是非常人性化的,它提供了不同功能分组战士的能力,Android中菜单分为以下三种形式:选项菜单(Option Menu)、上下文菜单(Context Menu)和子菜单(Sub Menu)。
4.2选项菜单
当用户单击设备上的Menu按钮后,弹出的菜单就是选项菜单。选项菜单的菜单最多只有六个,超过六个后将以更多来展示。
如何创建一个选项菜单,步骤如下:
(1).重写Activity类的onCreateOptionsMenu方法,当我们第一次打开菜单时该方法自动调用。
(2)调用Menu的add方法添加菜单选项(MenuItem),这个菜单选项还可以通过setIcon方法来设置菜单的图标。
(3)当菜单项(MenuItem)被选择时,重写Activity的onOptionsItemSelected()方法来响应事件。
示例如下:创建并响应菜单选项
package xbb.bzq.android.app;
import android.app.Activity; import android.os.Bundle; import android.view.Menu;
public class MenuAndroidActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
// 定义菜单选项的常量值 private static final int GROUP_ID = 0X110;
private static final int SETTING = 0X111; private static final int HElP = 0x112; private static final int EXIT = 0x113;
//定义菜单选项的编号 private static final int SETTING_FIRST=0x001; private static final int HELP_SECOND = 0x002; private static final int EXIT_THIRD=0x003; /* * 重写onCreateOption上Menu方法,添加菜单选项*/ @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(GROUP_ID, SETTING, SETTING_FIRST, "设置"); menu.add(GROUP_ID,HElP, HELP_SECOND, "帮助"); menu.add(GROUP_ID, EXIT, EXIT_THIRD, "退出"); return true; } } |
到目前为止,只是将菜单选项添加进去了,这里我们演示添加了三个选项,点击menu按钮时会看到如图4.1所示的界面:
图 4.1 菜单选项界面
上图可能给会给用户造成不好的印象,也就是说界面设计不是很好。所以,在这里,我们应该怎样去添加一些修饰的图片(也就是Icon)呢?继续往下研究:
/* * 重写onCreateOption上Menu方法,添加菜单选项*/ @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(GROUP_ID, SETTING, SETTING_FIRST, "设置").setIcon(R.drawable.ic_launcher_settings); menu.add(GROUP_ID,HElP, HELP_SECOND, "帮助").setIcon(android.R.drawable.ic_menu_help); menu.add(GROUP_ID, EXIT, EXIT_THIRD, "退出").setIcon(android.R.drawable.ic_menu_set_as); return true; } |
这里主要是修改了添加菜单选项的内容,增添了一个setIcon方法,里面设置的图片主要演示了添加Icon的两种方式,
1.从系统中获取(android.R.drawable.ic_menu_help),
2.根据自己添加的图片(R.drawable.ic_launcher_settings)来确定。
具体演示效果如图4.2所示
图 4.2 菜单选项界面
当菜单选项设置到这里时,我们就应该考虑应该怎样给每个菜单添加监听事件。上面我们提到通过重写Activity的onOptionsItemSelected()方法来响应,那么到底应该怎样使用?所以,我们继续往前走着:
/** * 重写Activity的onOptionsItemSelected()方法来响应菜单事件 */ @Override public boolean onOptionsItemSelected(MenuItem item) { //通过重新设置界面TextView的显示内容来判断这个事件响应 //定义TextView控件 TextView mTextView =(TextView) findViewById(R.id.display_textview); //根据传入的menu的id来得到对应的item switch (item.getItemId()) { case SETTING: mTextView.setText("点击了设置按钮。。。。。。。。"); break; case HElP: mTextView.setText("帮助按钮被点击了。。。。。。。。"); break; case EXIT: mTextView.setText("点击了退出按钮但是没有退出呀。。。。。。。。"); break; }
return super.onOptionsItemSelected(item); } |
到这里为止,一个完整的menu选项基本完成,但是真正的功能这里没有实现,主要在这里是一个演示作用,在后面的学习中,我们会一一介绍的。
4.3 上下文菜单
当用户长时间按键不放时,弹出的菜单就叫上下文菜单。这个功能类似于Windows中右键弹出的菜单。在Android中,我们应该怎样实现这个功能呢?分为以下几步:
(1).重写Activity的onCreateContextMenu方法,调用Menu的add方法来增加菜单项(MenuItem)。
(2)重写onContextItemSelected方法,响应菜单单击事件。
(3)调用registerForContextMenu方法为当前的View注册上下文菜单。
示例:上下文菜单的使用(创建并响应菜单选项):
package xbb.bzq.android.app;
import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.View;
public class ContextMenuTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } //定义菜单选项的id private static final int GROUP_ID = 0X110; // 定义菜单选项的常量值 private static final int SETTING = 0X111; private static final int HElP = 0x112; private static final int EXIT = 0x113;
//定义菜单选项的编号 private static final int SETTING_FIRST=0x001; private static final int HELP_SECOND = 0x002; private static final int EXIT_THIRD=0x003; /** * 重写onCreateContextMenu方法,实现增加menu菜单项 */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(GROUP_ID, SETTING, SETTING_FIRST, "设置"); menu.add(GROUP_ID,HElP, HELP_SECOND, "帮助"); menu.add(GROUP_ID, EXIT, EXIT_THIRD, "退出"); } }
|
到这里,我们只是添加了一个上下文菜单,而没有真正实现其响应事件。实现其响应事件需要注册布局,也就是采用上面提到的registerForContextMenu方法,如下:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
//得到当前页面的布局 LinearLayout layout =(LinearLayout) findViewById(R.id.linearLayoutId); //注册上下文监听事件 registerForContextMenu(layout); } |
这里唯一不同的就是要获取当前布局管理器。所以在这之前需要给布局取一个ID,通过findViewById 来获取。再注册就可以了,界面效果如图4.3所示。
图 4.3 上下文菜单显示界面
说到这里,我们也没有给这个菜单加监听事件,那么,我们应该怎样添加呢?来吧,操作如下:
/** * 重写onContextItemSelected方法,用于监听 */ @Override public boolean onContextItemSelected(MenuItem item) { // 通过重新设置界面Title的显示内容来判断这个事件响应 // 根据传入的menu的id来得到对应的item switch (item.getItemId()) { case SETTING: this.setTitle("选择了设置选项"); break; case HElP: this.setTitle("选择了帮助选项"); break; case EXIT: this.setTitle("选择了退出选项"); break; } return true; } |
这里我们通过修改界面的Title来演示我们添加的事件得到了响应,其效果如下图4.4
图 4.4 点击退出选项后的界面
4.4 提示信息(Toast)
在Android增加了Toast这样小巧的交互部件,用户在程序中执行某一动作后,给予这样的一个Toast信息,并且过一会儿他就会自动消失,增强了体验和交互性。
那怎样创建一个Toast呢?步骤如下:
通过Toast这个类提供的静态方法makeText设置提示的文本和展示的时间值。
调用Toast的静态方法show进行显示,这一步类似于Dialog的显示操作。
实例:提示信息
//这里第一个参数表示引用上下文,第二个参数是设置显示的文本,第三个参数是设置的显示时间 Toast.makeText(this,"号码或密码不能为空", Toast.LENGTH_LONG).show(); |
附加:修改主配置文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xbb.bzq.android.app" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="4" />
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" //这里的name中的文件名才是要运行的文件,所以多个文件时,要修改这个name android:name=".ContextMenu" > <intent-filter > <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MenuTestActivity"></activity> </application>
</manifest> |
Android用户界面
--------第四次课
4.1 菜单
菜单的设计在人机交互中可以说是非常人性化的,它提供了不同功能分组战士的能力,Android中菜单分为以下三种形式:选项菜单(Option Menu)、上下文菜单(Context Menu)和子菜单(Sub Menu)。
4.2选项菜单
当用户单击设备上的Menu按钮后,弹出的菜单就是选项菜单。选项菜单的菜单最多只有六个,超过六个后将以更多来展示。
如何创建一个选项菜单,步骤如下:
(1).重写Activity类的onCreateOptionsMenu方法,当我们第一次打开菜单时该方法自动调用。
(2)调用Menu的add方法添加菜单选项(MenuItem),这个菜单选项还可以通过setIcon方法来设置菜单的图标。
(3)当菜单项(MenuItem)被选择时,重写Activity的onOptionsItemSelected()方法来响应事件。
示例如下:创建并响应菜单选项
package xbb.bzq.android.app;
import android.app.Activity; import android.os.Bundle; import android.view.Menu;
public class MenuAndroidActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
// 定义菜单选项的常量值 private static final int GROUP_ID = 0X110;
private static final int SETTING = 0X111; private static final int HElP = 0x112; private static final int EXIT = 0x113;
//定义菜单选项的编号 private static final int SETTING_FIRST=0x001; private static final int HELP_SECOND = 0x002; private static final int EXIT_THIRD=0x003; /* * 重写onCreateOption上Menu方法,添加菜单选项*/ @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(GROUP_ID, SETTING, SETTING_FIRST, "设置"); menu.add(GROUP_ID,HElP, HELP_SECOND, "帮助"); menu.add(GROUP_ID, EXIT, EXIT_THIRD, "退出"); return true; } } |
到目前为止,只是将菜单选项添加进去了,这里我们演示添加了三个选项,点击menu按钮时会看到如图4.1所示的界面:
图 4.1 菜单选项界面
上图可能给会给用户造成不好的印象,也就是说界面设计不是很好。所以,在这里,我们应该怎样去添加一些修饰的图片(也就是Icon)呢?继续往下研究:
/* * 重写onCreateOption上Menu方法,添加菜单选项*/ @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(GROUP_ID, SETTING, SETTING_FIRST, "设置").setIcon(R.drawable.ic_launcher_settings); menu.add(GROUP_ID,HElP, HELP_SECOND, "帮助").setIcon(android.R.drawable.ic_menu_help); menu.add(GROUP_ID, EXIT, EXIT_THIRD, "退出").setIcon(android.R.drawable.ic_menu_set_as); return true; } |
这里主要是修改了添加菜单选项的内容,增添了一个setIcon方法,里面设置的图片主要演示了添加Icon的两种方式,
1.从系统中获取(android.R.drawable.ic_menu_help),
2.根据自己添加的图片(R.drawable.ic_launcher_settings)来确定。
具体演示效果如图4.2所示
图 4.2 菜单选项界面
当菜单选项设置到这里时,我们就应该考虑应该怎样给每个菜单添加监听事件。上面我们提到通过重写Activity的onOptionsItemSelected()方法来响应,那么到底应该怎样使用?所以,我们继续往前走着:
/** * 重写Activity的onOptionsItemSelected()方法来响应菜单事件 */ @Override public boolean onOptionsItemSelected(MenuItem item) { //通过重新设置界面TextView的显示内容来判断这个事件响应 //定义TextView控件 TextView mTextView =(TextView) findViewById(R.id.display_textview); //根据传入的menu的id来得到对应的item switch (item.getItemId()) { case SETTING: mTextView.setText("点击了设置按钮。。。。。。。。"); break; case HElP: mTextView.setText("帮助按钮被点击了。。。。。。。。"); break; case EXIT: mTextView.setText("点击了退出按钮但是没有退出呀。。。。。。。。"); break; }
return super.onOptionsItemSelected(item); } |
到这里为止,一个完整的menu选项基本完成,但是真正的功能这里没有实现,主要在这里是一个演示作用,在后面的学习中,我们会一一介绍的。
4.3 上下文菜单
当用户长时间按键不放时,弹出的菜单就叫上下文菜单。这个功能类似于Windows中右键弹出的菜单。在Android中,我们应该怎样实现这个功能呢?分为以下几步:
(1).重写Activity的onCreateContextMenu方法,调用Menu的add方法来增加菜单项(MenuItem)。
(2)重写onContextItemSelected方法,响应菜单单击事件。
(3)调用registerForContextMenu方法为当前的View注册上下文菜单。
示例:上下文菜单的使用(创建并响应菜单选项):
package xbb.bzq.android.app;
import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.View;
public class ContextMenuTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } //定义菜单选项的id private static final int GROUP_ID = 0X110; // 定义菜单选项的常量值 private static final int SETTING = 0X111; private static final int HElP = 0x112; private static final int EXIT = 0x113;
//定义菜单选项的编号 private static final int SETTING_FIRST=0x001; private static final int HELP_SECOND = 0x002; private static final int EXIT_THIRD=0x003; /** * 重写onCreateContextMenu方法,实现增加menu菜单项 */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(GROUP_ID, SETTING, SETTING_FIRST, "设置"); menu.add(GROUP_ID,HElP, HELP_SECOND, "帮助"); menu.add(GROUP_ID, EXIT, EXIT_THIRD, "退出"); } }
|
到这里,我们只是添加了一个上下文菜单,而没有真正实现其响应事件。实现其响应事件需要注册布局,也就是采用上面提到的registerForContextMenu方法,如下:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
//得到当前页面的布局 LinearLayout layout =(LinearLayout) findViewById(R.id.linearLayoutId); //注册上下文监听事件 registerForContextMenu(layout); } |
这里唯一不同的就是要获取当前布局管理器。所以在这之前需要给布局取一个ID,通过findViewById 来获取。再注册就可以了,界面效果如图4.3所示。
图 4.3 上下文菜单显示界面
说到这里,我们也没有给这个菜单加监听事件,那么,我们应该怎样添加呢?来吧,操作如下:
/** * 重写onContextItemSelected方法,用于监听 */ @Override public boolean onContextItemSelected(MenuItem item) { // 通过重新设置界面Title的显示内容来判断这个事件响应 // 根据传入的menu的id来得到对应的item switch (item.getItemId()) { case SETTING: this.setTitle("选择了设置选项"); break; case HElP: this.setTitle("选择了帮助选项"); break; case EXIT: this.setTitle("选择了退出选项"); break; } return true; } |
这里我们通过修改界面的Title来演示我们添加的事件得到了响应,其效果如下图4.4
图 4.4 点击退出选项后的界面
4.4 提示信息(Toast)
在Android增加了Toast这样小巧的交互部件,用户在程序中执行某一动作后,给予这样的一个Toast信息,并且过一会儿他就会自动消失,增强了体验和交互性。
那怎样创建一个Toast呢?步骤如下:
通过Toast这个类提供的静态方法makeText设置提示的文本和展示的时间值。
调用Toast的静态方法show进行显示,这一步类似于Dialog的显示操作。
实例:提示信息
//这里第一个参数表示引用上下文,第二个参数是设置显示的文本,第三个参数是设置的显示时间 Toast.makeText(this,"号码或密码不能为空", Toast.LENGTH_LONG).show(); |
附加:修改主配置文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xbb.bzq.android.app" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="4" />
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" //这里的name中的文件名才是要运行的文件,所以多个文件时,要修改这个name android:name=".ContextMenu" > <intent-filter > <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MenuTestActivity"></activity> </application>
</manifest> |