zoukankan      html  css  js  c++  java
  • Android用户界面

    4.1 菜单

    菜单的设计在人机交互中可以说是非常人性化的,它提供了不同功能分组战士的能力,Android中菜单分为以下三种形式:选项菜单(Option Menu)、上下文菜单(Context Menu)和子菜单(Sub Menu)。

     

    4.2选项菜单

    当用户单击设备上的Menu按钮后,弹出的菜单就是选项菜单。选项菜单的菜单最多只有六个,超过六个后将以更多来展示。

    如何创建一个选项菜单,步骤如下:

    (1).重写Activity类的onCreateOptionsMenu方法,当我们第一次打开菜单时该方法自动调用。

    (2)调用Menuadd方法添加菜单选项(MenuItem),这个菜单选项还可以通过setIcon方法来设置菜单的图标。

    (3)当菜单项(MenuItem)被选择时,重写ActivityonOptionsItemSelected()方法来响应事件。

    示例如下:创建并响应菜单选项

    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  菜单选项界面

    当菜单选项设置到这里时,我们就应该考虑应该怎样给每个菜单添加监听事件。上面我们提到通过重写ActivityonOptionsItemSelected()方法来响应,那么到底应该怎样使用?所以,我们继续往前走着:

    /**

     * 重写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).重写ActivityonCreateContextMenu方法,调用Menuadd方法来增加菜单项(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)调用Menuadd方法添加菜单选项(MenuItem),这个菜单选项还可以通过setIcon方法来设置菜单的图标。

    (3)当菜单项(MenuItem)被选择时,重写ActivityonOptionsItemSelected()方法来响应事件。

    示例如下:创建并响应菜单选项

    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  菜单选项界面

    当菜单选项设置到这里时,我们就应该考虑应该怎样给每个菜单添加监听事件。上面我们提到通过重写ActivityonOptionsItemSelected()方法来响应,那么到底应该怎样使用?所以,我们继续往前走着:

    /**

     * 重写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).重写ActivityonCreateContextMenu方法,调用Menuadd方法来增加菜单项(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>

     

    一切只是为了充实自己!!stay hungry and stay foolish!!
  • 相关阅读:
    shell 远程调用脚本
    Shell 特殊符号
    Centos 7 安全加固命令行
    unix2dos
    这都是啥啥啥
    发现一个识图比较厉害的网站
    Java 中用正则表达式修改 Email 地址
    PHP 7.0 中各种 Hash 速度比较
    利用create_ap软件创建无线AP
    &#129418; 自用Firefox和AdBlockPlus黑白名单
  • 原文地址:https://www.cnblogs.com/Catherine-Brain/p/3273602.html
Copyright © 2011-2022 走看看