android中的提示框:Dialog以及改变Dialog的显示位置


简介

提示框(Dialog)在手机APP中,是必不可少的,比如设置些简单的属性、进度提醒等。
就提示框(Dialog)而言,可以用两种方式:①、用android自带的类去实现;②、按自己的需要建一个xml作为一个对话框。
很明显第一种方法只能实现简单的对话框,代码量少;第二种方法可以实现任何想要的对话框,代码量大


第一种方式的常用简单的对话框

①普通对话框:

这里写图片描述

AlertDialog.Builder builder = new AlertDialog.Builder(this);
/*设置主题、内容、按钮*/
builder.setTitle("普通对话框").setMessage("是否删除?").setNegativeButton("否", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface arg0, int arg1) {
                        arg0.dismiss();
                        /*关闭对话框*/
                    }
                })
                .setPositiveButton("是", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                        Toast.makeText(MainActivity.this, "删除成功!",
                                Toast.LENGTH_SHORT).show();
                                /*提醒测试作用*/
                    }
                });
        builder.create().show();

注:按钮分为确定按钮、取消按钮和中间按钮,当然中间按钮(setNeutralButton)没有在代码上体现。取消按钮一定在确定按钮的前面。


②列表对话框:

这里写图片描述

final String[] provices = new String[] { "北京", "湖南", "江苏", "上海", "浙江" };
        AlertDialog.Builder builder = new Builder(this);
        builder.setTitle("选择省份:");
        /*!注意这里的方法以及参数哦!*/
        builder.setItems(provices, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                provice = provices[arg1];
                Toast.makeText(MainActivity.this, "选择的城市为:" + provices[arg1],
                        Toast.LENGTH_SHORT).show();
                        /*提醒测试作用*/
            }
        });
        builder.create().show();

③单选对话框:

这里写图片描述

final String[] provices = new String[] { "北京", "湖南", "江苏", "上海", "浙江" };
        AlertDialog.Builder builder = new Builder(this);

        builder.setTitle("单选按钮对话框");
        /*!注意这里的方法以及参数哟!"0"表示弹出对话框时,第一个是被选中的*/
        builder.setSingleChoiceItems(provices, 0,
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                        Toast.makeText(MainActivity.this,
                                "选择的城市是:" + provices[arg1], Toast.LENGTH_SHORT)
                                .show();
                                /*提醒测试作用*/
                    }
                });
        builder.create().show();

④多选对话框:

这里写图片描述

final String[] provices = new String[] { "北京", "湖南", "江苏", "上海", "浙江" };
final boolean[] bs={false,false,false,false,false};
        AlertDialog.Builder builder = new Builder(this);
        builder.setTitle("复选按钮对话框");
        /*!注意这里的方法以及参数0,boolean数组的个数要与第一个参数的数组个数要对应!*/
        builder.setMultiChoiceItems(provices, bs,
                new DialogInterface.OnMultiChoiceClickListener() {

                    @Override
                    public void onClick(DialogInterface arg0, int arg1,
                            boolean arg2) {
                        /*注意字符串数组provices和布尔数组bs的一一对应关系*/
                    }
                });
        builder.create().show();

第一种方式较复杂的对话框

⑤日期对话框

这里写图片描述

OnDateSetListener dateSetListener = new OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
            /*arg1表示年份,arg2表示几月(比实际月份要少一),arg3表示几号*/

                Toast.makeText(MainActivity.this,
                        "设置的时间为:" + arg1 + "年" + (arg2 + 1) + "月" + arg3 + "日",
                        Toast.LENGTH_SHORT).show();
                        /*提示检测作用*/
            }
        };
        /*注意这里声明对话框的方式与其他的对话框的区别*/
        DatePickerDialog datePickerDialog=new DatePickerDialog(this, dateSetListener, 2015, 10, 30);
        datePickerDialog.show();
        /*这里的第三个参数为年份,第四个为几月,在对话框显示是11月,自动加一,第五个是几号*/

⑥进度条对话框

这里写图片描述

/*注意这里声明对话框的方式与其他的对话框的区别*/
ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setIcon(R.drawable.ic_launcher);
        progressDialog.setTitle("进度条对话框");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        /*这里表示添加最大进度,后面可以通过setprogress方法修改进度*/
        progressDialog.setMax(100);
        /*这里的button可以随便set,不限制个数*/
        progressDialog.setButton("Hide", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface Dialog, int which) {
               //这里添加点击这个按钮后的事件
            }
        });
        progressDialog.setButton2("Cancel",
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                    //这里添加点击这个按钮后的事件
                    }
                });

        progressDialog.show();

注:是不是发现有的dialog是先create然后又show的,其实不create是完全可以滴。。。


http://download.csdn.net/detail/zhengyikuangge/9311301 测试代码已上传,可能和上述代码有点差别,但大体上是一样一样的~


第二种方式实现步骤

案例示范:

①主xml文件添加一个按钮

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="200dp"
    android:layout_height="150dp"
    >
<Button
    android:id="@+id/bt1" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="提示框"
    />


</RelativeLayout>

②创建settishi.xml文件做对话框(只是简单的示范)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="200dp"
    android:layout_height="150dp" 
    android:background="#FF0000">
    <!--尽量不要在外面在套用布局,会出现bug。不过在里面可以随便套 -->

</RelativeLayout>

③新建SetTiShi.java

public class SetTiShi extends Dialog {
    Context context;

    public SetTiShi(Context context, int theme) {
    /*这里很重要,按照规定好的格式去执行dialog*/
        super(context, theme);
        // TODO Auto-generated constructor stub
        this.context = context;
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settishi);
    }

}

④res/values/styles.xml中添加代码

<style name="MyDialog" parent="@android:Theme.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <!--读英文就知道啥意思了,把窗口背景改成无色 -->
    </style>

⑤MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.bt1).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                   jianting();
            }
        });

    }
        /*在onClick中不能直接声明Dialog*/
    public void jianting() {
        Dialog dialog = new SetTiShi(this, R.style.MyDialog);
        dialog.show();
    }
}

注:这种方法其实也不难,除去代码量的问题,它比第一种方法还简单。就是把一个普通的Activity变成了一个Dialog。这个就不加代码了~


附加第三种方式

Dialog mDialog = new Dialog(this);
//创建dialog
mDialog.getWindow().setBackgroundDrawable(new ColorDrawable());
//设置背景颜色
Window win = mDialog.getWindow();
//获取dialog窗口
win.setContentView(R.layout.set_ip_dialog);
//设置显示的布局文件
mDialog.show();

改变Dialog出现的位置:

Dialog dialog = new Dialog(this);
/*随意定义个Dialog*/
Window dialogWindow = dialog.getWindow();
/*实例化Window*/
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
/*实例化Window操作者*/
lp.x = 100; // 新位置X坐标
lp.y = 100; // 新位置Y坐标
dialogWindow.setAttributes(lp);
/*放置属性*/
dialog.show();
/*show dialog*/

注:另外说一下lp.x和lp.y具体怎么定位,和数学中坐标轴几乎一模一样,有四个象限,不过一二象限和三四象限换位置了,默认是在0,0显示,那就是屏幕中间。象限原点也可以移动。还有一点,要根据实际的Dialog样式来确定,多测试测试就好了。


注意在Dialog中的按钮添加监听事件时的写法和Activity中添加监听事件的区别(导入包的区别)


在声明一个Dialog对象也可以这样声明:

AlertDialog dialog = new AlertDialog.Builder(this).create();

给dialog中添加组件的时候有些不同:
添加Button时需要多加一个参数说明Button的类型,例如:

dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "是",
         new DialogInterface.OnClickListener() {

         @Override
         public void onClick(DialogInterface arg0, int arg1) {
         // TODO Auto-generated method stub

         }

测试代码地址:
http://download.csdn.net/detail/zhengyikuangge/9509234

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值