自定义Dialog、带时间和日期的Dialog、PopupWindow、Notification

Dialog

自定义Dialog

  private void showDialog5() {
        final Dialog dialog=new Dialog(DialogActivity.this,R.style.NoDialogTitle);
        LayoutInflater inflater=getLayoutInflater();
        View dialogSelf =inflater.inflate(R.layout.activity_dialogself, null);
        TextView textView_title= (TextView) dialogSelf.findViewById(R.id.text_title);
        TextView textView_content= (TextView) dialogSelf.findViewById(R.id.text_message);
        Button button_ok= (Button) dialogSelf.findViewById(R.id.button_ok);
        Button button_cancel= (Button) dialogSelf.findViewById(R.id.button_cancel);

        Spanned spanned= Html.fromHtml("添加<img src='drawable'/>一个<font color='#ffc0c0'>富文本</font>", new Html.ImageGetter() {
            @Override
            public Drawable getDrawable(String source) {
                Drawable drawable=getResources().getDrawable(R.mipmap.dog1);
                drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
                return drawable;
            }
        },null);

        textView_content.setText(spanned);
        button_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"你点击了确定",Toast.LENGTH_LONG).show();
                dialog.dismiss();
            }
        });
        button_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
       //dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(dialogSelf);
        dialog.show();
    }

自定义的Dialog其实是自己自定义一个界面。不用系统给出的界面,需要用LayoutInflater来加载自定义的View,也可以为按钮文本等设置背景字体颜色等,与自己的界面比较搭配。
这里写图片描述

带时间的Dialog

private void showDialog7() {
        mCalendar=Calendar.getInstance();
        TimePickerDialog dialog=new TimePickerDialog(DialogActivity.this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mCalendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
                mCalendar.set(Calendar.MINUTE,minute);
                SimpleDateFormat format=new SimpleDateFormat("HH:mm");
                Toast.makeText(getApplicationContext(),format.format(mCalendar.getTime()),Toast.LENGTH_LONG).show();
            }
        },mCalendar.get(Calendar.HOUR_OF_DAY),mCalendar.get(Calendar.MINUTE),false);
        dialog.show();
    }

带有日期和时间的Dialog都是Dialog的子类,都是系统自身都写好的,只是添加点自己定义的时间等,所以就用到了Calender类,用来对时间日期等进行定义。可以再之后的按钮事件中加入需要定义改变的内容,这里只是简单的利用Toast来作为一个点击事件。
这里写图片描述

带日期的Dialog

private void showDialog6() {
        mCalendar=Calendar.getInstance();
        DatePickerDialog dialog=new DatePickerDialog(DialogActivity.this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                mCalendar.set(year,monthOfYear,dayOfMonth);
                SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日");
                Toast.makeText(getApplicationContext(),format.format(mCalendar.getTime()),Toast.LENGTH_LONG).show();
            }
        },mCalendar.get(Calendar.YEAR),mCalendar.get(Calendar.MONTH),mCalendar.get(Calendar.DAY_OF_MONTH));
        dialog.show();
    }

这里写图片描述

其他控件

 private void showPopupWindow() {
        mPopupWindow=new PopupWindow(DialogActivity.this);
        LayoutInflater inflater=getLayoutInflater();
        View popView=inflater.inflate(R.layout.activity_popupwindow, null);
        mPopupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        mPopupWindow.setContentView(popView);
        mPopupWindow.setBackgroundDrawable(getResources().getDrawable(R.mipmap.dog1));
        mPopupWindow.setFocusable(false);
        mPopupWindow.setOutsideTouchable(true);
        mPopupWindow.showAsDropDown(mButton8);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode==KeyEvent.KEYCODE_BACK){
            if (mPopupWindow!=null&&mPopupWindow.isShowing()){
                mPopupWindow.dismiss();
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }

这里写图片描述
PopupWindow是一个在点击对象下弹出的一个对话框,在对话框中可以进行选择,同样点击之后需要加载自定义的View,还必须要设置该View的宽和高。
mPopupWindow.setOutsideTouchable(true);
这一句代码表示点击其他地方会是的该对话框消失,下边重写了onKeyDown方法,使得点击系统返回键的时候也可以使得对话框关闭。

Notification

package com.example2.administrator.mygridviewapplication;

import android.annotation.TargetApi;
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.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

/**
 * Created by Administrator on 2015/8/28.
 */
public class NotificationActivity extends Activity implements View.OnClickListener {
    private Button mButton_on;
    private Button mButton_on2;
    private Button mButton_off;
    private Notification mNotification;
    private Notification mNotification2;
    private NotificationManager mNotificationManager;
    private String title="注意啦!";
    private String content="石老大,你妈喊你回家吃饭了!!!";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notification);
        mNotificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mButton_on= (Button) findViewById(R.id.button_notifi_on);
        mButton_on2= (Button) findViewById(R.id.button_notifi_on2);
        mButton_off= (Button) findViewById(R.id.button_notifi_off);
        mButton_on.setOnClickListener(this);
        mButton_on2.setOnClickListener(this);
        mButton_off.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button_notifi_on:
                creatNotification1();
                break;
            case R.id.button_notifi_on2:
                createNotification2();

                break;
            case R.id.button_notifi_off:
                mNotificationManager.cancel(1);
                break;
            default:
                break;
        }
    }
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private void createNotification2() {
        Intent intent2 = new Intent(getApplicationContext(), DialogActivity.class);
        PendingIntent pend2=PendingIntent.getActivity(getApplicationContext(),1,intent2,PendingIntent.FLAG_ONE_SHOT);
        mNotification2=new Notification.Builder(getApplicationContext()).setSmallIcon(R.mipmap.dog2).setTicker("消息来了")
                .setContentTitle("注意啦!").setContentText("石老大,你妈喊你回家吃饭啦").setContentInfo("听到了没")
                .setContentIntent(pend2).build();
        mNotificationManager.notify(2,mNotification2);
    }

    private void creatNotification1() {
        mNotification=new Notification();
        mNotification.icon= R.mipmap.dog1;
        mNotification.tickerText="title";
        mNotification.flags=Notification.FLAG_AUTO_CANCEL;
        Intent intent=new Intent(getApplicationContext(),DialogActivity.class);
        PendingIntent pend=PendingIntent.getActivity(getApplicationContext(),1,intent,PendingIntent.FLAG_ONE_SHOT);
        mNotification.setLatestEventInfo(getApplicationContext(),title,content,pend);
        mNotificationManager.notify(1, mNotification);
    }
}

这里写图片描述
这里定义了两种方法来弹出一个通知。上边那种方法是通过一些的set方法来实现最终的结果,而第二种方法是通过一个最后通过setLatestEventInfo方法来讲所有的需要显示的内容和点击的事件都进行加载。不过这个方法已经过时。NotificationManger的notify方法来使得该通知可以显示。还可以通过NotificationManger的cancel方法来讲弹出的通知关闭。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值