2016-04-12 15:58:18 jiaoyaning1210 阅读数 2995
  • Android 项目实战-影讯

    本课程包含14个小节课程,内容包括:影讯项目演示,影讯项目架构,使用聚合API后台,封装Volley网络框架,根据JSON格式创建JavaBean,实现底部导航 ,实现侧滑菜单,实现MovieDao,实现可索引ListView,集成百度地图实现定位,实现首页电影列表,实现电影详情,实现影院列表,实现影院详细。

    6650 人正在学习 去看看 郭宏志

描述

正常状态下应是下图
这里写图片描述


而底部弹出popwindow后会出现下图的问题:

这里写图片描述

解决方法

一句话解决问题。

  //防止虚拟软键盘被弹出菜单遮住       popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
2017-05-09 07:43:56 jdh99 阅读数 4022
  • Android 项目实战-影讯

    本课程包含14个小节课程,内容包括:影讯项目演示,影讯项目架构,使用聚合API后台,封装Volley网络框架,根据JSON格式创建JavaBean,实现底部导航 ,实现侧滑菜单,实现MovieDao,实现可索引ListView,集成百度地图实现定位,实现首页电影列表,实现电影详情,实现影院列表,实现影院详细。

    6650 人正在学习 去看看 郭宏志

Android编程:底部弹出的对话框


本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.


环境:

主机:WIN10

开发环境:Android Studio 2.2 Preview 3


说明:

《Android编程:底部弹出的对话框》中实现了底部弹出的对话框。在此基础上实现通用的输入框,效果如下图所示。输入框类中通过回调机制通知活动,从而实现了活动与对话框的解耦。



效果图:



布局文件dialog_input.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        android:text="标题"/>

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/input"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLines="1"
            android:singleLine="true" />

    </android.support.design.widget.TextInputLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="16dp"
        android:paddingBottom="16dp">
        <Button
            android:id="@+id/cancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:text="取消" />

        <Button
            android:id="@+id/ok"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:text="确定" />
    </LinearLayout>
</LinearLayout>


源代码:

InputDialogInterface.class:

package com.bazhangkeji.classroom.common;

public interface InputDialogInterface {
    void onClick();
    FilterResult filter(String inputText);

    class FilterResult {
        public boolean result;
        // 错误提示.result为false时有效
        public String errorHint = "";
    }
}


InputDialog.class:

package com.bazhangkeji.classroom.common;

import android.app.Dialog;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputEditText;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.bazhangkeji.classroom.R;
import com.bazhangkeji.classroom.database.DBPersonalInfo;
import com.bazhangkeji.classroom.database.PersonalInfo;
import com.bazhangkeji.classroom.session.VideoSessionActivity;
import com.bazhangkeji.classroom.session.VoiceSessionActivity;
import com.jakewharton.rxbinding2.view.RxView;
import com.trello.rxlifecycle2.android.ActivityEvent;
import com.trello.rxlifecycle2.android.FragmentEvent;
import com.trello.rxlifecycle2.components.RxDialogFragment;


import java.util.concurrent.TimeUnit;

public class InputDialog extends RxDialogFragment {
    private Dialog dialog;
    private InputDialogInterface observer;
    private String title;
    private String hint;

    private TextInputEditText editTextInput;

    /**
     * 初始化.必须调用一次
     * @param title: 标题
     * @param hint: 提示
     * @param observer: 观察者对象
     */
    public void init(String title, String hint, InputDialogInterface observer) {
        this.title = title;
        this.hint = hint;
        this.observer = observer;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        dialog = new Dialog(getActivity(), R.style.DialogPopBottom);

        View inflate = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_input, null);
        dialog.setContentView(inflate);
        dialog.setCanceledOnTouchOutside(true);

        Window window = dialog.getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.gravity = Gravity.BOTTOM;
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        window.setAttributes(lp);

        TextView textViewTitle = (TextView) inflate.findViewById(R.id.title);
        Button buttonCancel = (Button) inflate.findViewById(R.id.cancel);
        Button buttonOK = (Button) inflate.findViewById(R.id.ok);
        editTextInput = (TextInputEditText) inflate.findViewById(R.id.input);

        textViewTitle.setText(title);
        editTextInput.setHint(hint);

        RxView.clicks(buttonCancel)
                .throttleFirst(1, TimeUnit.SECONDS)
                .compose(this.bindUntilEvent(FragmentEvent.DESTROY))
                .subscribe(v -> dialog.cancel());

        RxView.clicks(buttonOK)
                .throttleFirst(1, TimeUnit.SECONDS)
                .compose(this.bindUntilEvent(FragmentEvent.DESTROY))
                .subscribe(v -> {
                    InputDialogInterface.FilterResult filterResult = observer.filter(editTextInput.getText().toString());
                    if (filterResult == null || filterResult.result) {
                        dialog.cancel();
                        observer.onClick();
                    } else {
                        editTextInput.setError(filterResult.errorHint);
                        editTextInput.requestFocus();
                    }
                });

        return dialog;
    }

    /**
     * 得到输入内容
     * @return 输入内容
     */
    public String getInput() {
        return editTextInput.getText().toString();
    }
}


 初始化:

private InputDialog addFriendDialog = new InputDialog();

addFriendDialog.init("搜索好友", "请输入用户id", new InputDialogInterface() {
            @Override
            public void onClick() {
                Logging.e("click!!!" + addFriendDialog.getInput());
            }

            @Override
            public FilterResult filter(String inputText) {
                return isInputValid(inputText);
            }
        });
private InputDialogInterface.FilterResult isInputValid(String inputText) {
        InputDialogInterface.FilterResult filterResult = new InputDialogInterface.FilterResult();
        if (TextUtils.isEmpty(inputText)) {
            filterResult.result = false;
            filterResult.errorHint = "请输入用户号";
        } else if (isContainIllegalChar(inputText)) {
            filterResult.result = false;
            filterResult.errorHint = "用户号不能包含中文空格等字符";
        } else if (inputText.length() < 5 || inputText.length() > 20) {
            filterResult.result = false;
            filterResult.errorHint = "用户号长度需要5";
        } else if (inputText.startsWith("g")) {
            filterResult.result = false;
            filterResult.errorHint = "用户号不能以g开头";
        } else {
            filterResult.result = true;
        }
        return filterResult;
    }

    private boolean isContainIllegalChar(String str) {
        char[] ch = str.toCharArray();
        for  (char c : ch) {
            if (c <= 0x20 || c >= 0x7f) {
                return true;
            }
        }
        return false;
    }


显示:

addFriendDialog.show(getFragmentManager(), "");



2013-07-19 12:16:22 buruifeng 阅读数 572
  • Android 项目实战-影讯

    本课程包含14个小节课程,内容包括:影讯项目演示,影讯项目架构,使用聚合API后台,封装Volley网络框架,根据JSON格式创建JavaBean,实现底部导航 ,实现侧滑菜单,实现MovieDao,实现可索引ListView,集成百度地图实现定位,实现首页电影列表,实现电影详情,实现影院列表,实现影院详细。

    6650 人正在学习 去看看 郭宏志

今天介绍两种控件,用来向用户提供通知并供选择,ActionSheet从底部弹出,可以显示一系列的按钮,AlertView是屏幕中间弹出一个对话框形式的,类似于android的dialog,并且可以在AlertView上添加一个TextField用来输入密码或者别的内容。具体看代码,我们还打开昨天的代码,上面我们昨天设置了一个button控件,今天我们先用这个button控件来响应一个ActionSheet:

昨天的button是空白的,我们先打开xib文件,编辑title为“点击调出ActionSheet",然后在viewController中创建一个操作方法clickButton,将该button的touch up inside行为与该方法相关联,然后在该方法中如下编辑:

[plain] view plaincopy
  1. - (IBAction)clickButton:(id)sender {  
  2.     UIActionSheet *myActionSheet=[[UIActionSheet alloc]initWithTitle:@"标题" delegate:self cancelButtonTitle:@"取消键" destructiveButtonTitle:@"毁灭键" otherButtonTitles:@"额外加键", nil];  
  3.     //这样就创建了一个UIActionSheet对象,如果要多加按钮的话在nil前面直接加就行,记得用逗号隔开。  
  4.     //下面是显示,注意ActioinSheet是出现在底部的,是附加在当前的View上的,所以我们用showInView方法  
  5.     [myActionSheet showInView:self.view];  
  6.       
  7. }  

这时,ActionSheet已经可以显示出效果了:


但是这个ActionSheet是没有按键响应的,如果细心的话会发现上面我们在创建ActionSheet对象时有一个delegate参数我们给了self,这个参数就是指要响应ActionSheet选择事件的对象,响应ActionSheet事件需要实现一个协议UIActionSheetDelegate,我们写了self,那么我们就在viewController里实现这个协议,然后重写这个协议中的actionSheet:didDismissWithButtonIndex:方法,用该方法来捕捉actionSheet的响应事件。看代码:

在viewController.h声明时加上这样

[plain] view plaincopy
  1. @interface ViewController : UIViewController<UIActionSheetDelegate>  

在.m文件里面添加协议方法:

[plain] view plaincopy
  1. -(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex  
  2. {  
  3.     if (buttonIndex==[actionSheet destructiveButtonIndex])   
  4.         //这里捕捉“毁灭键”,其实该键的index是0,从上到下从0开始,称之为毁灭是因为是红的  
  5.     {  
  6.         //点击该键后我们再弹出一个AlertView  
  7.         UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"AlertView的标题" message:@"我是一个AlertView" delegate:self cancelButtonTitle:@"取消键" otherButtonTitles:@"随手加", nil];  
  8.         //这是弹出的一个与当前View无关的,所以显示不用showIn,直接show  
  9.         [myAlertView show];  
  10.     }  
  11. }  

该方法捕捉了我们点击ActionSheet中的毁灭键后的事件:生成了一个AlertView并显示,如下


我们发现AlertView的生成方法和ActionSheet真的很像,不同的只是一个是show,一个是showIn,代码中我们的AlertView的两个按键我们还没有进行处理,同ActionSheet的按键响应几乎一样,我们需要将当前的类(self)实现一个协议,<UIAlertViewDelegate>

[plain] view plaincopy
  1. @interface ViewController : UIViewController<UIActionSheetDelegate,UIAlertViewDelegate>  
在.m文件中的响应方法为:

[plain] view plaincopy
  1. -(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex  
  2. {  
  3.     //这里你自己补充吧,你可以再弹出一个ActionSheet或者什么,whatever,who cares?  
  4. }  

好了,到此为止吧。


转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7404302

2017-05-17 22:46:48 u014434080 阅读数 234
  • Android 项目实战-影讯

    本课程包含14个小节课程,内容包括:影讯项目演示,影讯项目架构,使用聚合API后台,封装Volley网络框架,根据JSON格式创建JavaBean,实现底部导航 ,实现侧滑菜单,实现MovieDao,实现可索引ListView,集成百度地图实现定位,实现首页电影列表,实现电影详情,实现影院列表,实现影院详细。

    6650 人正在学习 去看看 郭宏志

在平时的开发中,我们可能时常需要自定义Dialog,比如常见的需求,通知提示用户的dialog,第二种是从底部弹出的dialog,第三种是带输入框的dialog等。下面就是对一个自定义dialog的简单的封装。

直接看效果,不会作图,图都是网上找的。

这里写图片描述

1,看普通的提示框效果,我只是展示效果,界面并不是很详细

这里写图片描述

2,从底部弹出效果

这里写图片描述
3,带输入控件的弹出效果,自动启动输入法

这里写图片描述

下面时自定义的CustomDialog类:

/**
 * Created by wjq on 2017/5/16.
 */

public class CustomDialog extends Dialog{

    private Context context;
    private int height, width;
    private boolean cancelTouchout;
    private View view;
    private int mLocation; //dialog从哪里弹出
    private int dialogAnim; //dialog显示隐藏动画


    private CustomDialog(Builder builder) {
        super(builder.context);
        context = builder.context;
        height = builder.height;
        width = builder.width;
        mLocation = builder.location;
        cancelTouchout = builder.cancelTouchout;
        view = builder.view;
    }


    private CustomDialog(Builder builder, int resStyle) {
        super(builder.context, resStyle);
        context = builder.context;
        height = builder.height;
        width = builder.width;
        mLocation = builder.location;
        cancelTouchout = builder.cancelTouchout;
        view = builder.view;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(view);

        setCanceledOnTouchOutside(cancelTouchout);

        Window win = getWindow();
        WindowManager.LayoutParams lp = win.getAttributes();
        lp.gravity = mLocation;
        lp.height = height;
        lp.width = width;
        win.setAttributes(lp);
    }

    public static final class Builder {

        private Context context;
        private int height, width;
        private boolean cancelTouchout;
        private View view;
        private int resStyle = -1;  //dialog显示样式文件
        private int location = Gravity.CENTER; //默认从中间弹出
        private int animStyle = -1;   //dialog进入及关闭时动画的样式文件


        public Builder(Context context) {
            this.context = context;
        }

        public Builder view(int resView) {
            view = LayoutInflater.from(context).inflate(resView, null);
            return this;
        }

        public Builder heightpx(int val) {
            height = val;
            return this;
        }

        public Builder widthpx(int val) {
            width = val;
            return this;
        }

        public Builder heightdp(int val) {
            height = DensityUtil.dip2px(context, val);
            return this;
        }

        public Builder widthdp(int val) {
            width = DensityUtil.dip2px(context, val);
            return this;
        }

        public Builder heightDimenRes(int dimenRes) {
            height = context.getResources().getDimensionPixelOffset(dimenRes);
            return this;
        }

        public Builder widthDimenRes(int dimenRes) {
            width = context.getResources().getDimensionPixelOffset(dimenRes);
            return this;
        }

        public Builder style(int resStyle) {
            this.resStyle = resStyle;
            return this;
        }

        public Builder dialogStyle(){
            this.animStyle = resStyle;
            return this;
        }

        public Builder location(int location){
            this.location = location;
            return this;
        }

        public Builder cancelTouchout(boolean val) {
            cancelTouchout = val;
            return this;
        }

        public Builder addViewOnclick(int viewRes,View.OnClickListener listener){
            view.findViewById(viewRes).setOnClickListener(listener);
            return this;
        }


        public CustomDialog build() {
            if (resStyle != -1) {
                return new CustomDialog(this, resStyle);
            } else {
                return new CustomDialog(this);
            }
        }
    }
}

当没有输入控件时Dialog样式

    <style name="Dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@color/full_transparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">false</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

当有输入控件时Dialog样式

    <style name="inputDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@color/full_transparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">false</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <!--下面这个是针对带输入内容的dialog时设置输入法自动弹出-->
        <item name="android:windowSoftInputMode">adjustResize|stateAlwaysVisible</item>
    </style>

整个使用该自定义Dialog的类如下:

/***
 * create by wjq
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button btn_dialog_one;
    Button btn_dialog_two;
    Button btn_dialog_three;
    CustomDialog dialog_one;
    CustomDialog dialog_two;
    CustomDialog dialog_three;
    CustomDialog.Builder builder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_dialog_one = (Button) findViewById(R.id.btn_dialog_one);
        btn_dialog_two = (Button) findViewById(R.id.btn_dialog_two);
        btn_dialog_three = (Button) findViewById(R.id.btn_dialog_three);
        btn_dialog_one.setOnClickListener(this);
        btn_dialog_two.setOnClickListener(this);
        btn_dialog_three.setOnClickListener(this);
        builder = new CustomDialog.Builder(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_dialog_one:
                showDialogOne();
                break;
            case R.id.btn_dialog_two:
                showDialogtwo();
                break;
            case R.id.btn_dialog_three:
                showDialogthree();
                break;
        }
    }

    private void showDialogthree() {
        dialog_three = builder.style(R.style.inputDialog)
                .heightDimenRes(R.dimen.dialog_height)
                .widthDimenRes(R.dimen.dialog_width)
                .cancelTouchout(true)
                .view(R.layout.dialog_three)
                .build();
        dialog_three.show();
    }

    private void showDialogOne() {
        dialog_one = builder.style(R.style.Dialog)  //Dialog的样式
                .heightDimenRes(R.dimen.dialog_height) //Dialog高
                .widthDimenRes(R.dimen.dialog_width)   //Dialog宽
                .cancelTouchout(true)           //点击Dialog外面,Dialog是否关闭
                .view(R.layout.dialog_one)      //Dialog布局文件
                .build();
        dialog_one.show();
    }

    private void showDialogtwo() {
        dialog_one = builder.style(R.style.Dialog)
                .heightDimenRes(R.dimen.dialog_height)
                .widthDimenRes(R.dimen.dialog_width)
                .location(Gravity.BOTTOM)
                .cancelTouchout(true)
                .view(R.layout.dialog_two)
                .build();
        dialog_one.show();
    }
}

上面就是对Dialog的简单封装。完整demo下载DialogDemo

2015-02-02 13:55:32 vaecer 阅读数 1646
  • Android 项目实战-影讯

    本课程包含14个小节课程,内容包括:影讯项目演示,影讯项目架构,使用聚合API后台,封装Volley网络框架,根据JSON格式创建JavaBean,实现底部导航 ,实现侧滑菜单,实现MovieDao,实现可索引ListView,集成百度地图实现定位,实现首页电影列表,实现电影详情,实现影院列表,实现影院详细。

    6650 人正在学习 去看看 郭宏志

        要实现Android的消息提示,就是提示用户有新的更新或者信息。即使当用户退出了应用程序。也会类似短信提示那种功能。长话短说,开个service,在后台一直跑,进行数据监控,发现有更新就触发消息提示功能。

        上代码:

package com.example.notificationdemo;

import android.os.Bundle;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RemoteViews;

public class MainActivity extends Activity {
	Button start;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		start = (Button) findViewById(R.id.start);
		start.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				// showDefaultNotification();
				showCustomizeNotification();
			}
		});
	}

	// 自定义显示的通知 ,创建RemoteView对象
	private void showCustomizeNotification() {

		CharSequence title = "信息";
		int icon = R.drawable.icon_blue;
		long when = System.currentTimeMillis();
		Notification noti = new Notification(icon, title, when + 10000);
		// noti.flags = Notification.FLAG_INSISTENT;

		noti.defaults |= Notification.DEFAULT_SOUND;
		noti.defaults |= Notification.DEFAULT_VIBRATE;
		noti.flags |= Notification.FLAG_AUTO_CANCEL;
		noti.flags |= Notification.FLAG_ONLY_ALERT_ONCE;

		// 1、创建一个自定义的消息布局 view.xml
		// 2、在程序代码中使用RemoteViews的方法来定义image和text。然后把RemoteViews对象传到contentView字段
		RemoteViews remoteView = new RemoteViews(this.getPackageName(),
				R.layout.notification);
		remoteView.setImageViewResource(R.id.noti_icon, R.drawable.icon_blue);
		remoteView.setTextViewText(R.id.noti_content, "出现预警,请查实!");
		noti.contentView = remoteView;
		// 3、为Notification的contentIntent字段定义一个Intent(注意,使用自定义View不需要setLatestEventInfo()方法)

		// 这儿点击后简单启动Settings模块
		PendingIntent contentIntent = PendingIntent.getActivity(
				MainActivity.this, 0, new Intent("android.settings.SETTINGS"),
				0);
		noti.contentIntent = contentIntent;

		NotificationManager mnotiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		mnotiManager.notify(0, noti);

	}

	// 默认显示的的Notification
	private void showDefaultNotification() {
		// 定义Notication的各种属性
		CharSequence title = "i am new";
		int icon = R.drawable.icon_blue_small;
		long when = System.currentTimeMillis();
		Notification noti = new Notification(icon, title, when + 10000);
		noti.flags = Notification.FLAG_INSISTENT;

		// 创建一个通知
		Notification mNotification = new Notification();

		// 设置属性值
		mNotification.icon = R.drawable.icon_blue_small;
		mNotification.tickerText = "NotificationTest";
		mNotification.when = System.currentTimeMillis(); // 立即发生此通知

		// 带参数的构造函数,属性值如上
		// Notification mNotification = = new
		// Notification(R.drawable.icon,"NotificationTest",
		// System.currentTimeMillis()));

		// 添加声音效果
		mNotification.defaults |= Notification.DEFAULT_SOUND;

		// 添加震动,后来得知需要添加震动权限 : Virbate Permission
		// mNotification.defaults |= Notification.DEFAULT_VIBRATE ;

		// 添加状态标志

		// FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉
		// FLAG_NO_CLEAR 该通知能被状态栏的清除按钮给清除掉
		// FLAG_ONGOING_EVENT 通知放置在正在运行
		// FLAG_INSISTENT 通知的音乐效果一直播放
		mNotification.flags = Notification.FLAG_INSISTENT;

		// 将该通知显示为默认View
		PendingIntent contentIntent = PendingIntent.getActivity(
				MainActivity.this, 0, new Intent("android.settings.SETTINGS"),
				0);
		mNotification.setLatestEventInfo(MainActivity.this, "通知类型:默认View",
				"一般般哟。。。。", contentIntent);

		// 设置setLatestEventInfo方法,如果不设置会App报错异常
		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

		// 注册此通知
		// 如果该NOTIFICATION_ID的通知已存在,会显示最新通知的相关信息 ,比如tickerText 等
		mNotificationManager.notify(2, mNotification);

	}

	private void removeNotification() {
		NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		// 取消的只是当前Context的Notification
		mNotificationManager.cancel(2);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}

配套demo:http://download.csdn.net/detail/vaecer/8416543

没有更多推荐了,返回首页