Dialog对话框
位于Activity上面的窗体,会使Activity完全失去焦点。点击Dialog的外面会导致Dialog的关闭
1.Dialog和Activity很相似,无非就是窗口化
2.Dialog不允许使用getBaseContext的方法来获取上下文
// 重要的属性和方法
cancelable : 是否能关闭(用户)
theme : 必须在构造方法的时候设置
setContentView();
findViewById();
所有的窗体类都支持的Dialog Toast popupWindow
show(); 显示这个窗体
dismiss(); 关闭这个窗体
// style属性
<item name = "android:windowNoTitle">true</item>没有标题栏
<item name = "android:windowBackground"></item>背景颜色
<item name = "android:windowIsTranslucent">true</item>窗体透明
<item name = "android:windowFullscreen">true</item>全屏(覆盖通知栏)
//自定义Dialog
//1.自定义Dialog主题
在values/colors
<color name="translucence">#8000</color>
在values/styles
<style name="DialogTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@color/translucence</item>
<item name="android:windowIsTranslucent">true</item>
</style>
//2.自定义Dialog布局
//3.使用主题和布局
public class MyDialog extends Dialog {
//构造方法加载样式
public MyDialog(Context context) {
super(context, R.style.DialogTheme);
}
//加载布局
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_progress);
setCancelable(false);
findViewById(R.id.rl).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
}
}
//------------------------完美的分割线-----------------------
在MainActivity中,
findViewById(R.id.tv).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyDialog dialog = new MyDialog(MainActivity.this);
dialog.show();
}
});
AlertDialog警告对话框
1.标题区, setTitle,setIcon
2.内容区, setView,setMessage,setItems,setAdapter,
setSingleChoiceItems,setMultiChoiceItems
3.按扭区, setNegative setNeutrality setPositive
使用Builder模式来创建的,除了内容区只能选择一个,其他区域都可以全选
监听事件:
DialogInterface.OnClicklistener
public void onclick(DialogInterface dialog , int which)
//dialog,当前点击的dialog
//which:哪一个,相当于position(按钮为-1,其他相当于position)
DialogInterface.OnMultiChoiceClickListener
public void onClick(DialogInterface dialog, int which,boolean isChecked)
//isChecked: 当前which是否被勾选
//最简单的AlertDialog
public void button1(View v) {
//标题区
new AlertDialog.Builder(this).setTitle("三国志13")
// 内容区 最简单的是一个Message 自带的文本框
.setIcon(R.drawable.ic_launcher).setMessage("英雄传")
//按钮区
.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// which:-1
}
}).create().show();;// 3个button都自带关闭功能
}
//带item的dialog
public void button2(View v) {
new AlertDialog.Builder(this).setTitle("三国志13")
.setItems(items, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// which 在按钮点击时为-1
// item点击是条目的序列
Toast.makeText(getBaseContext(),
"选择的是:" + items[which], Toast.LENGTH_SHORT)
.show();
}
}).create().show();
}
//带RadioButton的Dialog
public void button3(View v) {
new AlertDialog.Builder(this).setTitle("三国志13英雄单选")
.setSingleChoiceItems(items, 2, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selected = which;
}
}).setNegativeButton("取消", null)
.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getBaseContext(),
"你选择的是:" + items[selected], Toast.LENGTH_SHORT)
.show();
}
}).create().show();
}
//带checkBox的Dialog
public void button4(View v) {
new AlertDialog.Builder(this)
.setTitle("三国志13英雄多选")
.setMultiChoiceItems(items, boss,
new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which, boolean isChecked) {
boss[which] = isChecked;
}
}).setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < boss.length; i++) {
if (boss[i]) {
sb.append(items[i] + "::");
}
}
Toast.makeText(getBaseContext(), sb.toString(),
Toast.LENGTH_SHORT).show();
}
}).create().show();
}
NoTitleDialog
//加载样式
public class NoTitleDialog extends AlertDialog {
/** 构造方法设置Dialog样式 **/
protected NoTitleDialog(@NonNull Context context) {
super(context, R.style.NoTitleDialog);
}
/** 封装 **/
public static void showDialog(Context context,String msg){
new NoTitleDialog.Builder(context)
.setMessage(msg)
.setNegativeButton("取消",null)
.setPositiveButton("确定",null).show();
}
public static void showStoreDialog(Context context, View view, final OnStoreDialogClickListener listener) {
new NoTitleDialog.Builder(context)
//加载布局
.setView(view)
.setNegativeButton("选择其他门店", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
listener.onOtherClick();
}
})
.setPositiveButton("进入该店", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
listener.onEnterClick();
}
}).show();
}
/** 回调监听两个按钮 **/
public interface OnStoreDialogClickListener {
void onOtherClick();
void onEnterClick();
}
}
//在Activity或者是Fragment显示Dialog
private void showAlertDialog(final ShopBean bean) {
View layout = View.inflate(getContext(), R.layout.dialog_store, null);
TextView tv = (TextView) layout.findViewById(R.id.tv_name);
FormatUtil.setTexts(tv,bean.getShopName());
NoTitleDialog.showStoreDialog(getContext(), layout, new NoTitleDialog.OnStoreDialogClickListener() {
@Override
public void onOtherClick() {
}
@Override
public void onEnterClick() {
}
});
}