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();
}
其他控件
PopupWindow
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方法来讲弹出的通知关闭。