zoukankan      html  css  js  c++  java
  • android的对话框

    android中的对话框形式有四种,分别是一般对话框形式,列表对话框形式,单选按钮对话框,多选按钮对话框,下面我一一对他们进行详解。

    <一>一般对话框

    一般对话框形式如下图:

    具体实现代码如下:

    复制代码
     1 new AlertDialog.Builder(this)
    2 .setTitle("删除")//设置标题
    3 .setMessage("确定要删除指定的记录?")//设置提示消息
    4 .setPositiveButton("确定",new DialogInterface.OnClickListener() {//设置确定的按键
    5 @Override
    6 public void onClick(DialogInterface dialog, int which) {
    7 //do something
    8 }
    9 })
    10 .setNegativeButton("取消",new DialogInterface.OnClickListener() {//设置取消按键
    11 @Override
    12 public void onClick(DialogInterface dialog, int which) {
    13 //do something
    14 }
    15 })
    16 .setNeutralButton("忽略",new DialogInterface.OnClickListener() {//中立的,什么也不错
    17 @Override
    18 public void onClick(DialogInterface dialog, int which) {
    19 //do something
    20 }
    21 })
    22 .setCancelable(false)//设置按返回键是否响应返回,这是是不响应
    23 .show();//显示
    
    
    复制代码

    设置每一个Button按键时,都会传(CharSequence text, OnClickListener listener)参数,text是按键的文本,listener是一个DialogInterface.OnClickListener(),所以我们要创建这个对象并实现它的点击事件。在点击事件中有一个which参数不知道大家有没有注意,这个which实际上代表的是一个唯一的int型数值。像上面的setPositiveButton中的which代表的是-1,setNegativeButton中的which代表的是-3,setNeutralButton中的which代表的是-2.

    所以在这里为了代码的简化,我们不再为每一个Button创建DialogInterface.OnClickListener()对象,而是只创建一个DialogInterface.OnClickListener()对象来分别实现它们的点击事件。具体实现代码如下:

    复制代码
     1 DialogInterface.OnClickListener dialog = new DialogInterface.OnClickListener() {
    2 public void onClick(DialogInterface dialog, int which) {
    3 if(which == DialogInterface.BUTTON_POSITIVE){//确定按键的点击事件
    4 Toast.makeText(MainActivity.this, "ok!", 1).show();
    5 }
    6 else if(which == DialogInterface.BUTTON_NEGATIVE){//取消按键的点击事件
    7 Toast.makeText(MainActivity.this, "cancel", 1).show();
    8 }
    9 else if(which == DialogInterface.BUTTON_NEUTRAL){//忽略按键的点击事件
    10 Toast.makeText(MainActivity.this, "不知道", 1).show();
    11 }
    12 }
    13 };
    复制代码
    复制代码
    1 //对话框
    2 new AlertDialog.Builder(this)
    3 .setTitle("删除")//设置标题
    4 .setMessage("确定要删除指定的记录?")//设置提示消息
    5 .setPositiveButton("确定",dialog)
    6 .setNegativeButton("取消",dialog)
    7 .setNeutralButton("忽略",dialog)
    8 .setCancelable(false)//设置按返回键是否响应返回,这是是不响应
    9 .show();//显示
    复制代码

    <二>列表对话框

    懂得了上面的一般对话框的实现,那么下面的三种对话框就很容易实现了。列表对话框的实现效果如下图:

    具体实现代码如下:

    复制代码
     1 final String[] names = {"姚明","科比","詹姆斯"};//列表中显示的内容组成的数组
    2 new AlertDialog.Builder(this)
    3 .setTitle("列表对话框")//对话框标题
    4 .setItems(names, new DialogInterface.OnClickListener() {//每一条的名称
    5 public void onClick(DialogInterface dialog, int which) {//响应点击事件
    6 Toast.makeText(MainActivity.this, names[which], 1).show();
    7 }
    8 })
    9 .setPositiveButton("确定", new DialogInterface.OnClickListener() {//响应确定键的点击事件
    10
    11 @Override
    12 public void onClick(DialogInterface dialog, int which) {
    13 //do something
    14 }
    15 })
    16 .show();
    复制代码

    在设置列表显示时我们用到了setItems,在setItems中有(CharSequence[] items, OnClickListener listener)这样的参数,其中第一个参数是列表显示中的每一个条目的名称的数组,第二个是点击一个列表显示条目时的响应事件,所以在这里我们可以事先定义好一个数组来存放要显示的列表名称。这样在用时就方便多了。在条件点击影响事件时我们要实现onclick事件,这里也有一个参数which,它在API中的解释为which The button that was clicked (e.g. DialogInterface.BUTTON1) or the position of the item clicked.它和上面的which一样,也是代表一个唯一的数值。它在这里代表的是自己定义的那个存放列表名称的数组的下标值,因此我们可以通过下标来访问数组中的数值。当然我们也可以在列表对话框中增加button,这样也是可以的,我们当然也可以为这个button做响应事件。这里我就不多说了。

    <三>单选按钮对话框

    单选按钮对话框的运行效果如下:

    具体实现代码如下:

    复制代码
     1 final String[] lang = {"NBA","英超","西甲"} ;
    2 new AlertDialog.Builder(this)
    3 .setTitle("单选按钮对话框")//标题
    4 .setSingleChoiceItems(lang,0,new DialogInterface.OnClickListener() {//设置条目
    5 public void onClick(DialogInterface dialog, int which) {//响应事件
    6 // do something
    7 //关闭对话框
    8 dialog.dismiss();
    9 }
    10 })
    11 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    12
    13 @Override
    14 public void onClick(DialogInterface dialog, int which) {
    15 //do something
    16 }
    17 })//添加button并响应点击事件
    18 .show();
    复制代码

    在设置列表显示时我们用到了setSingleChoiceItems,在setSingleChoiceItems中有(CharSequence[] items, int checkedItem,OnClickListener listener)
    这样的参数,其中第一个参数是列表显示中的每一个条目的名称的数组,第二个是默认让哪一个条目被选择上,如上面的代码,我让第一条被默认选上,所以我就在checkedItem这个参数这里写上第一条在数组中的下标值0,如果我默认都没被选上,我就在这里写上-1,第三个是点击一个列表显示条目时的响应事件,所以在这里我们可以事先定义好一个数组来存放要显示的列表名称。这样在用时就方便多了。在条件点击影响事件时我们要实现onclick事件,这里也有一个参数which,它在API中的解释为which The button that was clicked (e.g. DialogInterface.BUTTON1) or the position of the item clicked.它和上面的which一样,也是代表一个唯一的数值。它在这里代表的是自己定义的那个存放列表名称的数组的下标值,因此我们可以通过下标来访问数组中的数值。在点击完我们可以设置让这个对话框消失,这里可以用dialog.dismiss();让对话框消失。当然我们也可以在列表对话框中增加button,这样也是可以的,我们当然也可以为这个button做响应事件。这里我就不多说了。

    <四>多选按钮对话框

    多选按钮对话框的运行效果如下:

    复制代码
     1 final String[] langs = { "NBA", "西甲", "英超" };
    2 final boolean[] selected = new boolean[] { true, false, true };// 一个存放Boolean值的数组
    3 new AlertDialog.Builder(this)
    4 .setTitle("多选列表对话框")
    5 // 标题
    6 .setMultiChoiceItems(langs, selected,
    7 new DialogInterface.OnMultiChoiceClickListener() {// 设置多选条目
    8 public void onClick(DialogInterface dialog,int which, boolean isChecked) {
    9 // do something
    10 }
    11 })
    12 .setPositiveButton("确定",
    13 new DialogInterface.OnClickListener() {
    14 public void onClick(DialogInterface dialog,
    15 int which) {
    16 // do something
    17 }
    18 }).show();
    复制代码

    在多选按钮对话框中,我们用setMultiChoiceItems来设置多选按钮,这里setMultiChoiceItems中的参数为(CharSequence[] items, boolean[] checkedItems, OnMultiChoiceClickListener listener),第一个参数为要显示的条目的名称的数组,这里我们用一个String型的数组来存放,第二个是一个默认哪些按钮被选中的Boolean型数组,这里,我让下标为0和为2的条目默认被选中,当然,我们也可以事先定义好一个Boolean型数组。第三个参数就是点击多选按钮条目时的响应事件。在这个onClick事件中,同样有三个参数(DialogInterfacedialog, int which, boolean isChecked),第一个参数代表的是这个对话框,第二个参数代表的是String数组中存放的数值的下标值。第三个参数代表的是Boolean数组中的boolean值。当然我们也可以在列表对话框中增加button,这样也是可以的,我们当然也可以为这个button做响应事件。这里我就不多说了。

    以上就是Android中的四种对话框形式,在用的时候我们要学会灵活运用,不要局限于一种特定的形式,我们可以设计自己的对话框。不要被思想所束缚。

    2,像列表这种选择项的弹出式对话框,要改变样式一般都采取重写layout方式

    今天才了解到 其实可以自定义样式,与大家分享下,其实很简

    AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom)); 

    然后自定义自己的样式就可以了

    <?xml version="1.0" encoding="utf-8"?> 

    <resources> 

        <style name="AlertDialogCustom" parent="@android:style/AlertDialog"> 

            <item name="android:textColor">#00FF00</item> 

            <item name="android:typeface">monospace</item> 

            <item name="android:textSize">10sp</item> 

        </style> 

    </resources>   

    然后是Dialog的样式

    <style name="dialog" parent="@android:style/Theme.Dialog">
      <item name="android:windowFrame">@null</item>
      <item name="android:windowIsFloating">true</item>
      <item name="android:windowIsTranslucent">true</item>
      <item name="android:windowNoTitle">true</item>
      <item name="android:background">@android:color/transparent</item>
      <item name="android:windowBackground">@android:color/transparent</item>
      <item name="android:backgroundDimEnabled">true</item>
      <item name="android:backgroundDimAmount">0.6</item>
     </style>

  • 相关阅读:
    centos安装python
    【剑指Offer学习】【所有面试题汇总】
    内连接,外链接(左连接、右连接、全连接),交叉连接
    数据库三范式
    聚集索引与非聚集索引
    B树和B+树的区别
    TCP建立连接三次握手和释放连接四次握手
    HTTP协议详解
    常见的HTTP状态码(HTTP Status Code)说明
    归并排序的思想及递归运行步骤详解
  • 原文地址:https://www.cnblogs.com/manmanlu/p/3795146.html
Copyright © 2011-2022 走看看