Dialog
今天接着明天的Dialog,继续补充dialog的几个用法。
<1>弹出自定义的dialog
首先添加按钮
<Button
android:id="@+id/button5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="弹出自定义的dialog"
android:layout_below="@+id/button4"/>
接下来布局弹出的框架内容
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/dialog_bg">//整体屏幕的背景
<TextView
android:id="@+id/textview_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="俺是标题哦"
android:textColor="#f00"
android:textSize="30dp"
android:background="@drawable/dialog_title"/>//文本标题的背景调用文本标题的drawable
<TextView
android:id="@+id/textview_neirong"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="哥叫内容,懂吗!"
android:textSize="20dp"
android:padding="20dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button_cancle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/btn_background"//取消键背景调用取消键的drawable
android:text="取消" />
<Button
android:id="@+id/button_ok"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/right_background"//确定键的背景
android:text="确定" />
</LinearLayout>
</LinearLayout>
那么需要的drawable有哪些呢?
下面给出
//这个是取消键按之前的背景
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:bottomLeftRadius="@dimen/corners" />
<solid android:color="#79DFF6" />
<stroke
android:width="1dp"
android:color="@android:color/white" />
</shape>
————————————————————————————————
<shape
//这个是按下之后的效果
xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:bottomLeftRadius="@dimen/corners" />
<solid android:color="#79DFF6" />
<stroke
android:width="1dp"
android:color="@android:color/white" />
</shape>
——————————————————————————————————————
//然后写item,将点击后的效果写在前面,这就是取消键的点击效果和背景
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/btn_normal"/>
</selector>
————————————————————————————————————
//下面设计确定键
//按之前
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:bottomRightRadius="@dimen/corners" />
<solid android:color="#79DFF6" />
<stroke
android:width="1dp"
android:color="@android:color/white" />
</shape>
————————————————————————————
//按之后
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:bottomRightRadius="@dimen/corners" />
<solid android:color="#79DFF6" />
<stroke
android:width="1dp"
android:color="@android:color/white" />
</shape>
//item
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/right_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/right_normal"/>
</selector>
____________________
//标题区域的背景颜色
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:topLeftRadius="@dimen/corners"
android:topRightRadius="@dimen/corners"/>
<solid android:color="#ffffff" />//设置为白色
</shape>
——————————————————————————————————————
//整体的背景
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/corners" />
<solid android:color="#ddcccc" />//整体颜色设置为灰粉色,只要没有被其他颜色代替的区域都是这个颜色
<stroke
android:width="2dp"
android:color="@android:color/white" />//周围设置白色边框
</shape>
布局完的界面如下
activity中的方法
public void showSelf() {
dialog = new Dialog(MainActivity.this, R.style.NoDialogTitle);
LayoutInflater inflater = getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.item_dialog, null);
TextView textview_title = (TextView) dialogView.findViewById(R.id.textview_title);
TextView textview_neirong = (TextView) dialogView.findViewById(R.id.textview_neirong);
Button button_cancle = (Button) dialogView.findViewById(R.id.button_cancle);
Button button_ok = (Button) dialogView.findViewById(R.id.button_ok);
textview_title.setText("咱是新标题!");
textview_neirong.setText("哥是新内容!");
button_cancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
button_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "点击了确定", Toast.LENGTH_LONG).show();
dialog.dismiss();
}
});
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(dialogView);
dialog.show();
}
运行效果见下面视频
<2>弹出日期和时间的dialog
弹出日期的方法:
public void showData() {
mCalendar = Calendar.getInstance();
DatePickerDialog dialog = new DatePickerDialog(MainActivity.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("yyy年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();
}
弹出时间的方法
public void showTime() {
mCalendar = Calendar.getInstance();
TimePickerDialog dialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mCalendar.set(Calendar.HOUR, 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), mCalendar.get(Calendar.MINUTE), true);
dialog.show();
}
<3>PopupWindow
layout下的item_popup.xml布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="鸡腿" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="烤鸭" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="香蕉" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="大龙虾" />
</LinearLayout>
activity中的方法
case R.id.button1:
mPopupWindow = new PopupWindow(MainActivity.this);
View popview = getLayoutInflater().inflate(R.layout.item_popup, null);
mPopupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mPopupWindow.setContentView(popview);
mPopupWindow.setFocusable(false);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.showAsDropDown(mButton1);
综上dialog的实现效果如下所示:
Notification
用于消息提示,如手机屏幕上方的消息提示
<1>首先构建布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<Button//添加两个发送消息和取消消息的按钮
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发出消息" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="取消消息"
android:layout_below="@+id/button1"/>
</RelativeLayout>
<2>activity中的方法
//这是发出消息
Intent intent2 = new Intent(getApplicationContext(),MainActivity.class);//设置pengdingintent事件
PendingIntent pend2 = PendingIntent.getActivity(getApplicationContext(),1,intent2,PendingIntent.FLAG_ONE_SHOT);
Notification notification2 = new Notification.Builder(MainActivity.this).setSmallIcon(R.mipmap.ic_launcher).
setTicker("您有新的消息").setContentTitle("我是标题").setContentText("我是文本")
.setContentInfo("我是内容").setContentIntent(pend2).setAutoCancel(true).setWhen(System.currentTimeMillis()).build();
mNotification.notify(2,notification2);
—————————————————————————— ——————————————————————————————
mNotification.cancel(1);//这是取消消息
实现效果如下: