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应用消息通知,就为大家介绍完毕,感兴趣的小同鞋可以实现一下,代码简单,如有疑问欢迎留言讨论。新手学习,高手交流。

Android之OptionsMenu与Notification的实现的更多相关文章

  1. Android新旧版本Notification

    Android新旧版本Notification 在notification.setLatestEventInfo() 过时了 以前: NotificationManager mn = (Notific ...

  2. [Android Tips] 9. framework notification layout font size

    android 4.4 framework notification layout 相关字体大小 * title: notification_title_text_size: 18dp * conte ...

  3. Android消息通知(notification)和PendingIntent传值

    通知栏的自定义布局:转:http://blog.csdn.net/vipzjyno1/article/details/25248021 拓展 实现自定义的通知栏效果: 这里要用到RemoteViews ...

  4. 第13讲- Android之消息提示Notification

    第13讲 Android之消息提示Notification .Notification Notification可以理解为通知的意思一般用来显示广播信息,通知可以显示到系统的上方的状态栏(status ...

  5. Android 提醒公共方法 Notification

    SimpAndroidFarme是近期脑子突然发热想做的android快速开发的框架,目标是模块化 常用的控件,方便新手学习和使用.也欢迎老鸟来一起充实项目:项目地址 今天的目标是做一个公共的提醒方法 ...

  6. Android控件之Notification

    Android通知就是让设备在屏幕最顶上那栏里面显示图标,当滑下通知栏之后可以看到列表状的通知选项,有些是"通知"类型的,有些是"正在运行"类型的," ...

  7. Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式

    前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...

  8. android:使用RemoteView自定义Notification

    //网上相关内容较少,遂记录下来,备忘. //依然以音乐播放器demo为例. 效果截图 //锤子手机上的效果 step1 准备自定义layout 常规的实现方式,并不会因为是用于notificatio ...

  9. 【Android】监听Notification被清除

    前言 一般非常驻的Notification是可以被用户清除的,如果能监听被清除的事件就可以做一些事情,比如推送重新计数的问题. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www ...

随机推荐

  1. 整理 PHPstorm实用个人配置,修改调整个性化快捷键,修改使用phpstorm创建的模板的默认注释:

    对你有助请点赞,请顶------送人玫瑰,手留余香! 1:58 2016/3/12 整理PHPstorm实用个人配置,修改调整个性化快捷键,修改使用phpstorm创建的模板的默认注释: PHPsto ...

  2. C# uploadify 上传 -220 IO Error 问题

    1. 前端: uploadify 上文件大小限制配置. 2. 后端: web.config 配置 <?xml version="1.0"?> <configura ...

  3. iOS 遇到的错误总结

    1.[[[NSBundle mainBundle] loadNibNamed:@"UIFeedbackController" owner:nil options:nil] firs ...

  4. HDU 2509 Nim博弈变形

    1.HDU 2509  2.题意:n堆苹果,两个人轮流,每次从一堆中取连续的多个,至少取一个,最后取光者败. 3.总结:Nim博弈的变形,还是不知道怎么分析,,,,看了大牛的博客. 传送门 首先给出结 ...

  5. 浏览器的兼容问题 判断IE方法

    下面是一些判断ie的常用方法: <!-[if IE 6]> 此处是IE6才会执行的代码 <![endif]-> 还可以给他加个条件,比如判断IE6以下的浏览器: <!-[ ...

  6. Ncut源码编译错误的解决方法

    NCut是一个比较老的开源代码了.所以在新的matlab的环境下老出各种bug. 经过自己的各种折腾,总结为一下几点: 1.保证matlab的mex是有C编译器可以用的,具体可以用 mex -setu ...

  7. [IOS]使用了cocoapods 抱错Pods was rejected as an implicit dependency for ‘libPods.a’ because its architectures ......

    Pods was rejected as an implicit dependency for ‘libPods.a’ because its architectures ‘i386’ didn’t ...

  8. Spring Mvc的入门

    SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的. Spring Web MVC是什么: Sprin ...

  9. CentOS7 SWAP 设置 (实测 笔记)

    首先查看当前的内存及swap情况(参数 -h,-m ) [root@centos ~]# free -h 查看swap信息,包括文件和分区的详细信息 [root@centos ~]# swapon - ...

  10. HttpFox

    HttpFox是Firefox的插件,可以用于HTTP分析. https://addons.mozilla.org/en-US/firefox/addon/httpfox/   安装   1. 打开F ...