Android开发 ---xml构建选项菜单、上下文菜单(长按显示菜单)、发通知、发送下载通知
1、activity_main.xml
描述:
定义了一个TextView和三个按钮
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
> <TextView
android:id="@+id/mainText"
android:textSize="35dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="XML构建选项菜单"
android:onClick="test_1"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送通知"
android:onClick="test_2"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="下载通知"
android:onClick="test_3"
/>
</LinearLayout>
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/acticity_new_file"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
</LinearLayout>
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
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/m1"
android:title="吃饭"
/>
<item
android:id="@+id/m2"
android:title="睡觉">
<menu>
<item android:id="@+id/m2_1"
android:title="宿舍"
/>
<item android:id="@+id/m2_2"
android:title="教室"
/>
<item android:id="@+id/m2_3"
android:title="走廊"
/>
</menu>
</item>
<item
android:id="@+id/m3"
android:title="打豆豆"
/>
<item
android:id="@+id/m4"
android:title="退出"
/>
</menu>
6、AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nf.android_menu_notifaction"> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".NewFileActivity"></activity>
</application>
<uses-permission android:name="android.permission.VIBRATE"/>
</manifest>
7、头像资源


Android开发 ---xml构建选项菜单、上下文菜单(长按显示菜单)、发通知、发送下载通知的更多相关文章
- Android开发 ---代码创建选项菜单、隐藏菜单项、菜单的生命周期,菜单按钮图标设置、搜索框、xml中设置子菜单
1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> < ...
- Android开发 ---xml布局元素
1.android:orientation="vertical/horizontal" vertical为垂直布局, horizontal为水平布局 2.android:layou ...
- 阿里内部资料:Android开发核心知识笔记共2100页,58万字,完整版开放下载
作为一个3-5年的Android工程师,我们经常会遇到这些瓶颈: 1.技术视野窄长期在小型软件公司,外包公司工作,技术视野被限制的太厉害 2.薪资提升难初中级Android岗位薪资上升空间有限,基本上 ...
- Android开发——xml知识之xml可绘制对象简介
引言:摘录Android用户界面设计 Android支持各类xml可绘制对象,其中一些可绘制对象可用于实现让一个资源使用多个图片文件,另外一些则允许你在xml中真正地指定颜色,还有一些你从来都不会用到 ...
- android 开发 xml绘制shape与Selector与layer-list 一 基础篇
首先我们先来了解状态效果 android:state_pressed=["true" | "false"] 按下状态 android:state_focuse ...
- 【Android开发】构建Android源码编译环境
原文:http://android.eoe.cn/topic/android_sdk 构建Android源码编译环境 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码
1.前言 在14年的时候写过一篇博客关于ArcGIS for Android 10.1.1API 中文标注导致程序异常崩溃问题,但是当时并没有很好的解决这样一个问题,也并没有深入研究分析这样的一个异常 ...
- Android开发 sharesdk分享微信/朋友圈的时候只显示文字,不显示链接
问题:分享的时候只将分享的content分享出去了,连标题及链接都没有分享出去. 原因:没有配置image导致. 解决办法: 在 showShare 方法里面添加配置: if(ImageUrlOrP ...
- android开发中 解决服务器端解析MySql数据时中文显示乱码的情况
首先,还是确认自己MySql账户和密码 1.示例 账户:root 密码:123456 有三个字段 分别是_id .username(插入有中文数据).password 1)首先我们知道 ...
随机推荐
- 玩转spring boot——war部署
前言 之前部署spring boot应用是通过直接输入命令“java -jar”来实现的.而有些情况,由于部署环境的制约,只能把项目从jar转换成war才能部署,如新浪云sae的java环境容器.那怎 ...
- 【报错原因】Uncaught SyntaxError: Unexpected token <
实际上是当前页面引入的js文件路径找不到!!! 页面查找不到js文件自动跳转到404.html页面 域名+/404.html
- java并发之线程间通信
1.volatile 关键字 java 支持多个线程同时访问一个对象或对象的成员变量,而每个线程拥有这个变量的拷贝,虽然对象或成员变量分配的内存在共享内存,但每个执行的线程可以拥有一份拷贝,可以提高程 ...
- 使用Python在自己博客上进行自动翻页
先上一张代码及代码运行后的输出结果的图! 下面上代码: # coding=utf-8 import os import time from selenium import webdriver #打开火 ...
- 最新java学习路线:含阶段性java视频教程完整版
最新java学习路线:带阶段性java视频教程版本 第一阶段:Java基础 学习目标: 掌握基本语法.面向对象.常用类.正则.集合.Io流.多线程.Nio.网络编程.JDK新特性.函数式编程 知识点细 ...
- java 全局变量 的小结
利用关键字final声明常量,对于全局的常量(即在整个项目中都可用)通常按以下模式声明:public static final int MAX_VALUE=512 如果某常量只在本类使用,则应将其定义 ...
- jQuery 初知
jQuery 初知 介绍: jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗 ...
- 【题解】Luogu P3931 SAC E#1 - 一道难题 Tree
原题传送门 题目几乎告诉你要用最大流 先进行搜索,将树的叶子节点都连到一个虚拟点T上,流量为inf(这样不会干扰到前面部分的最大流) 其他边按树的形态连边,以根节点为S,跑一变最大流即可求出答案 #i ...
- opencv学习之路(20)、直方图应用
一.直方图均衡化--equalizeHist() #include "opencv2/opencv.hpp" using namespace cv; void main() { 6 ...
- QT下的darknet-GPU项目属性
#------------------------------------------------- # # Project created by QtCreator 2018-08-04T19:39 ...