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>

转载于:https://www.cnblogs.com/Catherine-Brain/p/3273602.html

Android用户界面相关推荐

  1. Android用户界面布局(layouts)

    Android用户界面布局(layouts) 备注:view理解为视图 一个布局定义了用户界面的可视结构,比如activity的UI或是APP widget的UI,我们可以用下面两种方式来声明布局: ...

  2. Android用户界面设计学习之旅-第二站

    通过上一篇文章,大概了解了Android用户界面的设计方式,以及如何通过XML来设计界面.并且完成了一个非常简单的示例. 在上一篇文章中,涉及到了一些资源文件,直观点说,就是res目录下的那些目录和文 ...

  3. android用户界面-菜单

    创建菜单 Creating Menus Android提供了三种基础菜单类型: 选项菜单Options Menu 这是一个活动的主菜单.通过按下设备菜单键来显示它.选项菜单包含两组菜单项: 图标菜单I ...

  4. android 用户界面教程实例汇总

    1.android用户界面之WebView教程实例汇总 http://www.apkbus.com/android-51718-1-1.html 2.android用户界面之Notification教 ...

  5. Android 用户界面---拖放(Drag and Drop)(二)

    拖拽事件监听器和回调方法 View对象既可以用实现View.OnDragListener接口的拖放事件监听器,也可以用View对象的onDragEvent(DragEvent)回调方法来接收拖拽事件. ...

  6. Android用户界面的设计方法心得,(8 Android) 用户界面UI设计

    (8 Android) 用户界面UI设计 3.1.1 Android界面视图类 Android 图形化的用户界面(Graphical User Interface , GUI) 采用了结构清晰的MVC ...

  7. android java与界面的关联_Android Studio安卓学习笔记(三)Android用户界面的设计布局与组件(一)用户界面布局设计(1)...

    当我们创建了一个安卓项目后,我们会发现真正建立一个完善的安卓项目并不是想象的那么容易.其实和设计GUI可视化界面一样,开发安卓也需要考虑很多方面,主要考虑的还是界面布局和需要的组件. 一:Androi ...

  8. Android用户界面设计

    Android用户界面设计 用户界面设计是Android应用开发的一项重要内容.在进行开发的过程中,我们需要了解UI元素如何呈现给用户,也就是如何控制UI界面.andorid提供了4种控制UI的方法. ...

  9. Android Studio安卓学习笔记(三)Android用户界面的设计布局与组件(一)用户界面布局设计(1)...

    当我们创建了一个安卓项目后,我们会发现真正建立一个完善的安卓项目并不是想象的那么容易.其实和设计GUI可视化界面一样,开发安卓也需要考虑很多方面,主要考虑的还是界面布局和需要的组件. 一:Androi ...

最新文章

  1. 独家 | 一个好的事件跟踪字典是什么样的?
  2. Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
  3. 每个用户做独立的线程同步
  4. 金蝶BOS开发中Edit编辑界面和List叙事薄界面需要写的代码
  5. static、volatile、synchronize
  6. 乔布斯,影响了一个时代的人
  7. BP算法是从天上掉下来的吗?
  8. 7个免费强大的Ajax文件管理器
  9. Android6.0 dump h264/h265编码裸流(二)
  10. 常见的几种网络抓包及协议分析工具
  11. 被 onnx.checker.check_model 检查出的常见错误
  12. 「luogu4093」[HEOI2016/TJOI2016]序列
  13. MySQL常用语句(二)
  14. PHP Yar - 学习/实践
  15. Win系统 - 两个固态硬盘能不能分配到同一个分区?
  16. 简师网:新录用公务员试用期限满一年可转正!
  17. Android电视机(机顶盒)初次开发的一些经验分享
  18. windows 查看端口号
  19. Windows时钟同步问题
  20. [Swift]LeetCode976. 三角形的最大周长 | Largest Perimeter Triangle

热门文章

  1. 2012年3月51CTO壁纸点评活动获奖名单【已结束】
  2. 如何解决无法显示隐藏文件文件夹
  3. 狂神css3笔记,【CSS】CSS3学习笔记(一)——选择器
  4. Java虚拟机(十)——直接内存概述
  5. php 环状,CSS3能写出这种环状吗,不是环形进度条?
  6. java js合并_JS合并单元格
  7. c语言将一个实型变量f=55.5678,《C语言程序设计》第2章2 常量和变量
  8. 函数局部有界性定理_高数第五章多元函数微分学
  9. 树状数组入门(有被精简的树状数组所震撼到)
  10. tomcat的php文件上传大小限制,PHP上传文件大小限制的调整 Nginx 413 Request Entity Too Large...