Dialog

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() {
            }
        });
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值