转载

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

正文到此结束
Loading...