1、activity_main.xml
描述:
定义了一个TextView和三个按钮
2、MainActivity.java
描述:
package com.nf.android_menu_notifaction;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Intent;import android.graphics.BitmapFactory;import android.graphics.Color;import android.os.Bundle;import android.os.SystemClock;import android.view.ContextMenu;import android.view.Menu;import android.view.MenuItem;import android.view.SubMenu;import android.view.View;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends Activity { private TextView mainText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainText = (TextView)findViewById(R.id.mainText); //为mainText绑定一个上下文菜单,注册上下文菜单 registerForContextMenu(mainText); } //-----------------------通过代码创建选项菜单------------------------------------------ //1、创建选项菜单 @Override public boolean onCreateOptionsMenu(Menu menu){ Intent intent = new Intent(this,NewFileActivity.class); intent.putExtra("message","Hello"); menu.add(0,0,0,"新建").setIntent(intent); menu.add(0,1,1,"打开"); menu.add(1,2,0,"保存"); //添加子菜单 SubMenu sbMenu = menu.addSubMenu("颜色"); sbMenu.add(11,4,0,"红色"); sbMenu.add(11,5,1,"黄色"); sbMenu.add(11,6,2,"绿色"); menu.add(1,3,1,"退出"); return super.onCreateOptionsMenu(menu); } //2、选项菜单打开之前执行的操作 @Override public boolean onPrepareOptionsMenu(Menu menu){ //菜单打开前进行一些设置 //将第一个菜单选择项设置为隐藏,或禁止点击 menu.getItem(0).setEnabled(false); return super.onPrepareOptionsMenu(menu); } //3、选项菜单中菜单项被选中 @Override public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case 1: Toast.makeText(this,"你选中了打开",Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(this,"你选中了保存",Toast.LENGTH_SHORT).show(); break; case 3: Toast.makeText(this,"你选中了退出",Toast.LENGTH_SHORT).show(); break; case 4: //改变文本颜色 mainText.setTextColor(Color.RED); break; case 5: mainText.setTextColor(Color.YELLOW); break; case 6: mainText.setTextColor(Color.GREEN); break; } return super.onOptionsItemSelected(item); } public void test_1(View view){ Intent intent = new Intent(this,NewFileActivity.class); startActivity(intent); } //--------------------------通过代码创建上下文菜单------------------------------------ //当你长按文本内容时,就会弹出下列菜单 @Override public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo){ SubMenu sm = menu.addSubMenu(3,7,0,"字体设置"); //给字体设置菜单设置菜单项 sm.add(3,9,0,"25sp"); sm.add(3,10,1,"35sp"); sm.add(3,11,2,"45sp"); menu.add(3,8,1,"删除"); super.onCreateContextMenu(menu,v,menuInfo); } private LinearLayout main; //当你点击字体设置菜单中的某一项时 @Override public boolean onContextItemSelected(MenuItem item){ switch (item.getItemId()){ case 8: //点击的id为8时是删除 main = (LinearLayout)findViewById(R.id.activity_main); main.removeView(mainText); break; case 9: //点击的id为9时是将字体设置为25sp mainText.setTextSize(25); break; case 10: //同上 mainText.setTextSize(35); break; case 11: //同上 mainText.setTextSize(45); break; } return super.onContextItemSelected(item); } //------------------------------发通知------------------------------ //定义一个NotifactionManager对象 private NotificationManager manager; //创建一个日历对象 private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); public void test_2(View view){ //获取NotifactionManager对象 manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); //构建一个Notifaction的Builder对象 Notification.Builder builder = new Notification.Builder(this); //设置通知相关信息 builder.setTicker("新的通知");//设置信息提示 builder.setSmallIcon(R.mipmap.ic_launcher);//设置通知提示图标 //设置通知人的头像 builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.user2)); //设置通知信息的标题 builder.setContentTitle("部门通知"); //设置通知信息的文本内容 builder.setContentText("今天中午一点在报告厅一开部门会议,"+sdf.format(new Date())); builder.setAutoCancel(true);//查看后自动取消 builder.setWhen(SystemClock.currentThreadTimeMillis());//什么时候发出的通知 builder.setDefaults(Notification.DEFAULT_ALL);//消息提示模式 //设置震动规律 builder.setVibrate(new long[]{1000,2000,1000,3000}); //设置声音 //builder.setSound(); //设置灯 builder.setLights(Color.GREEN,1000,1000); //设置点击通知后执行的动作 点击通知后,跳转页面显示内容 Intent intent = new Intent(this,NewFileActivity.class); intent.putExtra("message","今天中午一点在报告厅一开部门会议,请大家准时参加,通知发布时间:"+sdf.format(new Date())); //获取时间 int requestId = (int) new Date().getTime(); //pendingIntent是一种特殊的Intent。主要的区别在于Intent的执行立刻的,而pendingIntent的执行不是立刻的 //第一个参数连接上下文的context
// 第二个参数是对PendingIntent的描述,请求值不同Intent就不同 // 第三个参数是一个Intent对象,包含跳转目标 // 第四个参数有4种状态
PendingIntent pendingIntent = PendingIntent.getActivity(this,requestId,intent,PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); //发出通知 //发出通知,参数是(通知栏的id,设置内容的对象)
manager.notify(requestId,builder.build()); } //发送一个下载通知 Notification.Builder builder; public void test_3(View view){ manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); builder = new Notification.Builder(this); builder.setTicker("文件开始下载"); builder.setSmallIcon(R.mipmap.ic_launcher); builder.setContentTitle("文件下载"); builder.setContentText("文件正在下载中......"); builder.setWhen(SystemClock.currentThreadTimeMillis()); builder.setDefaults(Notification.DEFAULT_LIGHTS); builder.setProgress(100,0,false); //模拟正在执行下载 new Thread(new Runnable() { @Override public void run() { for (int i=1;i<=100;i++){ builder.setProgress(100,i,false); if (i ==100){ builder.setContentText("文件下载完毕!"); } manager.notify(1,builder.build()); SystemClock.sleep(100);//模拟下载 } manager.cancel(1); } }).start(); }
3、activity_new_file.xml
4、NewFileActivity.java
package com.nf.android_menu_notifaction;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.ContextMenu;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.LinearLayout;import android.widget.Toast;public class NewFileActivity extends Activity { private LinearLayout main; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new_file); Intent intent = getIntent(); String msg = intent.getStringExtra("message"); if (msg!=null&&msg.length()>0){ Toast.makeText(this,msg,Toast.LENGTH_SHORT).show(); } main = (LinearLayout)findViewById(R.id.acticity_new_file); //为activity_new_file绑定一个上下文菜单,注册上下文菜单 registerForContextMenu(main); } //--------------------------使用XML构建选项菜单--------------------------------------- @Override public boolean onCreateOptionsMenu(Menu menu){ //投影加载XML文件 getMenuInflater().inflate(R.menu.menu_option,menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ case R.id.m1: Toast.makeText(this,"吃饭",Toast.LENGTH_SHORT).show(); break; } return super.onOptionsItemSelected(item); } //------------------------使用XML构建上下文菜单---------------------------------------- @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo){ getMenuInflater().inflate(R.menu.menu_option,menu); super.onCreateContextMenu(menu,v,menuInfo); }}
5、menu/menu_option.xml
6、AndroidManifest.xml
7、头像资源