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