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)首先我们知道 ...
随机推荐
- [macOS] macOS下,VirtualBox安装CentOS7.4, 搭建nginx, mysql, PHP5.6&PHP7.1
准备工作 网络设置 相关教程:http://www.jianshu.com/p/e6ba699b5992 ifcfg-enp0s3配置 TYPE=Ethernet BOOTPROTO=dhcp DEF ...
- 隐藏非选中的checkBox
//隐藏非选中的checkBox function onlyCheckBox(){ $("#dtlTable tr:gt(0)").each(function(i) { var c ...
- samba服务器笔记 (一)
Samba安装 samba:主服务包:samba-client:客户端:samba-common:通用工具:samba4-libs:库:samba-winbind:windows域映射:samba-w ...
- docker基本管理
一.docker基本命令 1.docker 获取镜像 将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像 docker pull ubuntu:12.04 Pullin ...
- iptables 认识 第二章
一.四表五链 netfilter 通过四表五链两个维度来定义数据包过滤规则. #上面图片中 raw 表不在postrouting 链中,请注意 上图中的五个位置也被称为五个钩子函数(hook func ...
- MySql 三大知识点,索引、锁、事务,原理分析
1.索引 索引,类似书籍的目录,可以根据目录的某个页码立即找到对应的内容. 索引的优点:1. 天生排序,2. 快速查找. 索引的缺点:1. 占用空间,2. 降低更新表的速度. 注意点:小表使用全表扫描 ...
- [c/c++] programming之路(13)、函数
一.函数 #include<stdio.h> //stdio.stdlib标准库 #include<stdlib.h> //代码重用, 函数的诞生,C语言主要是函数组成 //写 ...
- 深入分析Parquet列式存储格式【转】
Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0. 列式存储 列式存 ...
- ORM查询条件
模板: from django.db import models class Article(models.Model): title = models.CharField(max_length=20 ...
- spring-data-jpa——如果使用了one-to-many,many-to-one的注解,在Jackson进行json字符串化时出现错误的解决方案
参考资料: http://blog.csdn.net/remote_roamer/article/details/51330843 http://blog.csdn.net/xiaodaiye/art ...