Android之OptionsMenu

  OptionsMenu是Android提供的一种菜单方式,我们知道当智能机刚兴起时,手机上都会有一个MENU(菜单键),当我们点击时,默认我们打开Android提供的默认菜单,本篇我么就一起来学一下,如何自定义Android MENU菜单。

  当我们创建一个Activity后,默认实现了OnCreate方法,我们想实现Android菜单,还需要实现另外两个方法:onCreateOptionsMenu();onOptionsItemSelected(),下面我们就一起来学习一下如何使用吧;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        menu.add(0, 0, 0, "分享");
        menu.add(0, 1, 1, "关于");

        return true;

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        case 0:
              //调用发短信功能
              Intent intent=new Intent(Intent.ACTION_SEND);
              intent.setType("text/plain");
              intent.putExtra(Intent.EXTRA_SUBJECT, "分享");
              intent.putExtra(Intent.EXTRA_TEXT, "I would like to share this with you...");//短信内容
              startActivity(Intent.createChooser(intent, getTitle()));
              break;
        case 1:
            Toast.makeText(MainActivity.this, "祝你开心愉快!", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
        }

        return true;
    }

}

  好了,我们的Android MENU菜单就实现了,大家快来试一下吧。



  下面我们一起学习一下Android通知系统Notification:

  • 要使用Android通知必须使用到Android通知管理器:NotificationManager管理这个应用程序的通知,每个Notification都有唯一标识符即ID。用于管理更新这个通知内容……

第一种:实现方式(Notification通知系统默认提示方式)

  Notification实例和别的应用不同,没有布局文件,这里我只在布局文件中添加了一个Button按钮,这里就不再赘述,下面看一下我们主控件Activity:

public class Activityone extends Activity {

        // 设置通知的ID
        private static final int MY_NOTIFICATION_ID = 1;

        // 记录通知的数目
        private int mNotificationCount;

        // 通知中的文本信息
        private final CharSequence tickerText = "你有一条新通知,请查看!";
        private final CharSequence contentTitle = "你好";
        private final CharSequence contentText = "欢迎你来到河南,来到焦作。";

        // Notification Action Elements
        private Intent mNotificationIntent;
        private PendingIntent mContentIntent;

        // 设置收到通知时的响铃
        private Uri soundURI = Uri.parse("android.resource://cn.edu.hpu.android.activity_notification/" + R.raw.music);

        //震动设置,必须在配置文件中声明震动许可
        private long[] mVibratePattern = { 0, 200, 200, 300 };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);

        mNotificationIntent = new Intent(Activityone.this, Activitytwo.class);
        mContentIntent = PendingIntent.getActivity(Activityone.this, 0, mNotificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);

        Button mybutton1 = (Button)findViewById(R.id.buttonone1);
        mybutton1.setOnClickListener(new OnClickListener() {

            @SuppressLint("NewApi")
            @Override
            public void onClick(View v) {
                // 建立通知
                Notification.Builder NB = new Notification.Builder(Activityone.this)
                .setTicker(tickerText)
                .setSmallIcon(android.R.drawable.stat_sys_warning)            //设置系统通知图标
                .setAutoCancel(true)        //设置通知是否可以取消
                .setContentTitle(contentTitle)
                .setContentText(contentText + " (" + ++mNotificationCount + ")")  //显示用户收到几条信息
                .setContentIntent(mContentIntent)    //设置跳转的地址
                .setSound(soundURI)        //设置声音的地址
                .setVibrate(mVibratePattern);        //设置收到通知时震动

                // Pass the Notification to the NotificationManager:
                NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                mNotificationManager.notify(MY_NOTIFICATION_ID, NB.build());
            }
        });
    }
}

  注意:cn.edu.hpu.android.activity_notification:是我们的主Activity的包名;R.raw.music:我们设置的提示音乐,这里我们的工程目录下并没有raw文件,需要我们在res下自行创建,然后将我们的音乐文件拷贝之此即可。

第二种:自定义通知栏提示视图

  既然是自定义,那么我们的自定义视图如下(custom_notification.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toast_layout_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#7777"
    android:padding="3dp" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="44dp"
        android:layout_height="44dp"
        android:layout_marginRight="10dp"
        android:contentDescription="Eye"
        android:src="@drawable/fire_eye_alien" />

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#FFF"
        android:textSize="10sp" />

</LinearLayout>

  同样我们主Activity并没有视图文件,那么我们主Activity代码与上面有哪些区别呢:

public class Activitythree extends Activity {

    // Notification ID to allow for future updates
    private static final int MY_NOTIFICATION_ID = 2;

    // Notification Count
    private int mNotificationCount;//记录通知的数目

    // Notification Text Elements
    private final CharSequence tickerText = "你有一条新通知,请查看!";
    private final CharSequence contentTitle = "你好";
    private final CharSequence contentText = "欢迎你来到河南,来到焦作。";

    // Notification Action Elements
    private Intent mNotificationIntent;
    private PendingIntent mContentIntent;

    // Notification Sound and Vibration on Arrival
    private Uri soundURI = Uri.parse("android.resource://cn.edu.hpu.android.activity_notification/"+ R.raw.music);

    //震动设置,必须在配置文件中声明震动许可
    private long[] mVibratePattern = { 0, 200, 200, 300 };

    RemoteViews mContentView = new RemoteViews("cn.edu.hpu.android.activity_notification", R.layout.custom_notification);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);

        mNotificationIntent = new Intent(Activitythree.this, Activityfour.class);
        mContentIntent = PendingIntent.getActivity(Activitythree.this, 0, mNotificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);

        Button mybutton1 = (Button)findViewById(R.id.buttonone1);
        mybutton1.setOnClickListener(new OnClickListener() {

            @SuppressLint("NewApi")
            @Override
            public void onClick(View v) {

                mContentView.setTextViewText(R.id.text, contentText + " ("
                        + ++mNotificationCount + ")");//设置视图中textview的内容

                Notification.Builder NB = new Notification.Builder(Activitythree.this)
                .setTicker(tickerText)
                .setSmallIcon(android.R.drawable.stat_sys_warning)
                .setAutoCancel(true)
                .setContent(mContentView)
                .setContentIntent(mContentIntent)
                .setSound(soundURI)
                .setVibrate(mVibratePattern);

                // Pass the Notification to the NotificationManager:
                NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                mNotificationManager.notify(MY_NOTIFICATION_ID, NB.build());

            }
        });  }
}

  最后补充一点,这里我们使用到了消息震动提示,所以我们需要在AndroidManifest.xml文件中声明一下震动权限:

<!-- 震动许可声明 -->
<uses-permission android:name="android.permission.VIBRATE" />

  到这里关于Android应用消息通知,就为大家介绍完毕,感兴趣的小同鞋可以实现一下,代码简单,如有疑问欢迎留言讨论。新手学习,高手交流。

时间: 2024-10-03 14:55:33

Android之OptionsMenu的相关文章

Android项目目录结构

src: 存放java代码 gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id project.properties: 指定当前工程采用的开发工具包的版本 libs: 当前工程所依赖的jar包. assets: 放置一些程序所需要的媒体文件. bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件. res(resources): 资源文件. drawable: 存放程序所用的图片. layout: 存放android的布局文件. menu:

Android源码项目目录结构

src: 存放java代码 gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id project.properties: 指定当前工程采用的开发工具包的版本 libs: 当前工程所依赖的jar包. assets: 放置一些程序所需要的媒体文件. bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件. res(resources): 资源文件. drawable: 存放程序所用的图片. layout: 存放android的布局文件. menu:

Android工程目录结构详解

工程目录结构: src: 存放java源代码的目录 gen: 存放自动生成文件的目录:R.java文件:存放res目录下对应资源的id 1,目录中存放所有由Android开发工具自动生成的文件. 2,目录中最重要的就是R.java文件.这个文件由Android开发工具自动产生的.Android开发工具会自动根据你放入res目录的资源,同步更新修改R.java文件. 3,正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java文件. 4,R.java文件在应用中起到了字典的

【Android快速入门1】目录结构及adb命令(以API19为例)

目录结构 src: 存放java代码gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的idproject.properties: 指定当前工程采用的开发工具包的版本libs: 当前工程所依赖的jar包.assets: 放置一些程序所需要的媒体文件.bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件. res(resources): 资源文件. drawable: 存放程序所用的图片. layout: 存放android的布局文件. fragm

Android工程目录结构

1.src: 存放java代码 2.gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id 3.project.properties: 指定当前工程采用的开发工具包的版本,可以改 4.libs: 当前工程所依赖的jar包.(例子:支付宝jar包) 5.assets: 放置一些程序所需要的媒体文件.,自带数据库,不在R文件中显示 6.bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件. 7.res(resources): 资源文件. drawa

Android开发基础 - 1

通信技术: 1G 模拟制式 只能进行语音通话. 2G GSM, CDMA 收发短信和邮件. 2.5G GPRS, EDGE 访问wap网络数据.(图片, 壁纸, 文字信息) 3G WCDMA(联通), CDMA2000(电信), TD-SCDMA(移动) 发微博, 查看高清图片, 小电影. 3.5G HSDPA, HSDPA+ 4G TD-LTE 下载速度: 50Mb/s = 6MB/s 上传速度: 10Mb/s = 1.2MB/s 100Mb/s != 100MB/s bit 1 Byte =

eclipse中android工程中目录结构

虽然google推出了android stutio替代eclipse,但是目前eclipse的使用量还是非常的大.在这里把eclipse中android工程目录结构列下,便于初学者学习: src: 存放java代码 gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id project.properties: 指定当前工程采用的开发工具包的版本 libs: 当前工程所依赖的jar包. assets: 放置一些程序所需要的媒体文件. bin: 工程的编译目录. 存放一些编译

Android开发简介

一.通信技术 1.1G:模拟制式 只能进行语音通话. 2.2G:GSM, CDMA 收发短信和邮件. 3.2.5G :GPRS, EDGE,访问wap网络数据.(图片, 壁纸, 文字信息). 4.3G:WCDMA(联通), CDMA2000(电信), TD-SCDMA(移动),发微博, 查看高清图片, 小电影.. 5.3.5G :HSDPA, HSDPA+. 6.4G:TD-LTE ,下载速度: 50Mb/s  = 6MB/s,上传速度: 10Mb/s = 1.2MB/s. 二.Android系

【Android快速入门】目录结构及adb命令【附Android拨号器的实现,自作】

目录结构 src: 存放java代码 gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id project.properties: 指定当前工程采用的开发工具包的版本 libs: 当前工程所依赖的jar包. assets: 放置一些程序所需要的媒体文件. bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件. res(resources): 资源文件. drawable: 存放程序所用的图片. layout: 存放android的布局文件.