2016-07-26 11:28:00 hjl343661629 阅读数 10
  • Android 6.0运行时权限讲解

    本节课中会对Android 6.0系统中新增的运行时权限功能进行一次透彻的讲解,包含运行时权限的引入背景、基本用法、佳封装实践等,还会讲一些很多人并不知道的运行时权限微技巧。

    12890 人正在学习 去看看 CSDN讲师

对话框封装

android常用对话框封装

在android开发中,经常会用到对话框跟用户进行交互,方便用户可操作性;接下来就对常用对话框进行简单封装,避免在项目中出现冗余代码,加重后期项目的维护量;代码如有问题欢迎大家拍砖指正一起进步。

先贴出演示结果,在晒出演示代码。
1、运行成功后,原始界面如下:

2、点击“显示普通对话框”,效果界面如下:

3、点击“显示列表对话框”,效果界面如下:

4、点击“显示单选按钮对话框”,效果界面如下:

5、点击“显示复选对话框”,效果界面如下:

代码:
1、项目目录结构如下

2、对话框封装类DialogTool

package com.hrtx.util;
 
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface.OnClickListener;
 
/**
 * 对话框封装类
 * 
 * @author jiqinlin
 *
 */publicclass DialogTool {
  
    /**
     * 创建普通对话框
     * 
     * @param ctx 上下文 必填
     * @param iconId 图标,如:R.drawable.icon 必填
     * @param title 标题 必填
     * @param message 显示内容 必填
     * @param btnName 按钮名称 必填
     * @param listener 监听器,需实现android.content.DialogInterface.OnClickListener接口 必填
     * @return
     */
 publicstatic Dialog createNormalDialog(Context ctx, 
   int iconId, 
   String title, 
   String message, 
   String btnName, 
   OnClickListener listener) {
  Dialog dialog=null;
  android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
  // 设置对话框的图标  builder.setIcon(iconId);
  // 设置对话框的标题  builder.setTitle(title);
  // 设置对话框的显示内容  builder.setMessage(message);
  // 添加按钮,android.content.DialogInterface.OnClickListener.OnClickListener  builder.setPositiveButton(btnName, listener);
  // 创建一个普通对话框
  dialog = builder.create();
  return dialog;
 }
  
  
    /**
     * 创建列表对话框
     * 
     * @param ctx 上下文 必填
     * @param iconId 图标,如:R.drawable.icon 必填
     * @param title 标题 必填
     * @param itemsId 字符串数组资源id 必填
     * @param listener 监听器,需实现android.content.DialogInterface.OnClickListener接口 必填
     * @return
     */
 publicstatic Dialog createListDialog(Context ctx, 
   int iconId, 
   String title, 
   int itemsId, 
   OnClickListener listener) {
  Dialog dialog=null;
  android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
  // 设置对话框的图标  builder.setIcon(iconId);
  // 设置对话框的标题  builder.setTitle(title);
  // 添加按钮,android.content.DialogInterface.OnClickListener.OnClickListener  builder.setItems(itemsId, listener);
  // 创建一个列表对话框
  dialog = builder.create();
  return dialog;
 }
  
    /**
     * 创建单选按钮对话框
     * 
     * @param ctx 上下文 必填
     * @param iconId 图标,如:R.drawable.icon 必填
     * @param title 标题 必填
     * @param itemsId 字符串数组资源id 必填
     * @param listener 单选按钮项监听器,需实现android.content.DialogInterface.OnClickListener接口 必填
     * @param btnName 按钮名称 必填
     * @param listener2 按钮监听器,需实现android.content.DialogInterface.OnClickListener接口 必填
     * @return
     */
 publicstatic Dialog createRadioDialog(Context ctx, 
   int iconId, 
   String title, 
   int itemsId, 
   OnClickListener listener,
   String btnName,
   OnClickListener listener2) {
  Dialog dialog=null;
  android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
  // 设置对话框的图标  builder.setIcon(iconId);
  // 设置对话框的标题  builder.setTitle(title);
  // 0: 默认第一个单选按钮被选中
  builder.setSingleChoiceItems(itemsId, 0, listener);
  // 添加一个按钮  builder.setPositiveButton(btnName, listener2) ;
  // 创建一个单选按钮对话框
  dialog = builder.create();
  return dialog;
 }
  
  
    /**
     * 创建复选对话框
     * 
     * @param ctx 上下文 必填
     * @param iconId 图标,如:R.drawable.icon 必填
     * @param title 标题 必填
     * @param itemsId 字符串数组资源id 必填
     * @param flags 初始复选情况 必填
     * @param listener 单选按钮项监听器,需实现android.content.DialogInterface.OnMultiChoiceClickListener接口 必填
     * @param btnName 按钮名称 必填
     * @param listener2 按钮监听器,需实现android.content.DialogInterface.OnClickListener接口 必填
     * @return
     */
 publicstatic Dialog createCheckBoxDialog(Context ctx, 
   int iconId, 
   String title, 
   int itemsId, 
   boolean[] flags,
   android.content.DialogInterface.OnMultiChoiceClickListener listener,
   String btnName,
   OnClickListener listener2) {
  Dialog dialog=null;
  android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
  // 设置对话框的图标  builder.setIcon(iconId);
  // 设置对话框的标题  builder.setTitle(title);
  builder.setMultiChoiceItems(itemsId, flags, listener);
  // 添加一个按钮  builder.setPositiveButton(btnName, listener2) ;
  // 创建一个复选对话框
  dialog = builder.create();
  return dialog;
 }
}

3、对话框Activity类DialogActivity

package com.ljq.activity;
 
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
/**
 * 对话框Activity类
 * 
 * @author jiqinlin
 *
 */publicclass DialogActivity extends Activity {
 privateboolean[] flags=newboolean[]{false,true,false}; //初始复选情况
 private String[] items=null;
  
    private EditText etText=null;
    private Button btnNormal=null;
    private Button btnList=null; 
    private Button btnRadio=null;
    private Button btnCheckBox=null;
     
    privatestaticfinalint DIALOG_NORMAL=0; //普通对话框常量
    privatestaticfinalint DIALOG_LIST=1; //列表对话框常量
    privatestaticfinalint DIALOG_RADIO=2; //单选按钮对话框常量
    privatestaticfinalint DIALOG_CHECKBOX=3; //复选对话框常量     
    @Override
    publicvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        items=getResources().getStringArray(R.array.hobby);
         
        etText=(EditText)findViewById(R.id.etText);
        btnNormal=(Button)findViewById(R.id.btnNormal);
        btnList=(Button)findViewById(R.id.btnList);
        btnRadio=(Button)findViewById(R.id.btnRadio);
        btnCheckBox=(Button)findViewById(R.id.btnCheckBox);
        btnNormal.setOnClickListener(l);
        btnList.setOnClickListener(l);
        btnRadio.setOnClickListener(l);
        btnCheckBox.setOnClickListener(l);
    }
     
    @Override
    protected Dialog onCreateDialog(int id) {
     Dialog dialog=null;
     switch (id) {
  case DIALOG_NORMAL: //创建普通对话框
   dialog = DialogTool.createNormalDialog(this, 
     R.drawable.icon, 
     "普通对话框", 
     "这是普通对话框中的内容!", 
     " 确 定 ", 
        new android.content.DialogInterface.OnClickListener(){
      @Override
      publicvoid onClick(DialogInterface dialog, int which) {
       etText.setText("这是普通对话框中的内容!");
       return;
      }
              }
            );
   break;
  case DIALOG_LIST: // 创建列表对话框
   dialog = DialogTool.createListDialog(this, 
     R.drawable.icon, 
     "列表对话框", 
     R.array.hobby, 
        new android.content.DialogInterface.OnClickListener(){
      @Override
      publicvoid onClick(DialogInterface dialog, int which) {
       String hoddy=getResources().getStringArray(R.array.hobby)[which];     
       etText.setText("您选择了: "+hoddy);
       return;
      }
              }
            );
   break;
  case DIALOG_RADIO: // 创建单选按钮对话框
   dialog=DialogTool.createRadioDialog(this, 
     R.drawable.icon,
     "单选按钮对话框",
     R.array.hobby, 
        new android.content.DialogInterface.OnClickListener() {
      @Override
      publicvoid onClick(DialogInterface dialog, int which) {
       String hoddy = getResources().getStringArray(
         R.array.hobby)[which];
       etText.setText("您选择了: " + hoddy);
       return;
      }
     },
        " 确 定 ",
           new android.content.DialogInterface.OnClickListener() {
      @Override
      publicvoid onClick(DialogInterface dialog, int which) {
       Toast.makeText(DialogActivity.this, 
         "您按了确定按钮!", Toast.LENGTH_LONG).show();
       return;
      }
     }
   );
   break;
  case DIALOG_CHECKBOX: // 创建复选框对话框
   dialog=DialogTool.createCheckBoxDialog(this, 
     R.drawable.icon,
     "复选对话框",
     R.array.hobby,
     flags, 
     new DialogInterface.OnMultiChoiceClickListener() {
      publicvoid onClick(DialogInterface dialog, int which, boolean isChecked) {
       flags[which] = isChecked;
       String result = "您选择了:";
       for (int i = 0; i < flags.length; i++) {
        if (flags[i]) {
         result = result + items[i] + "、";
        }
       }
       etText.setText(result.substring(0, result.length() - 1));
      }
     },
     " 确 认 ",
           new android.content.DialogInterface.OnClickListener() {
      @Override
      publicvoid onClick(DialogInterface dialog, int which) {
       Toast.makeText(DialogActivity.this, "您按了确定按钮!", Toast.LENGTH_LONG).show();
       return;
      }
     }
       
   );
   break;
  }
     return dialog;
    }
     
    //按钮监听
    View.OnClickListener l = new View.OnClickListener() {
  @Override
  publicvoid onClick(View v) {
   Button btn = (Button) v;
   switch (btn.getId()) {
   case R.id.btnNormal: //普通对话框
                //显示对话框    showDialog(DIALOG_NORMAL);
    break;
   case R.id.btnList: //列表对话框
                //显示对话框    showDialog(DIALOG_LIST);
    break;
   case R.id.btnRadio: //单选按钮对话框
                //显示对话框    showDialog(DIALOG_RADIO);
    break;
   case R.id.btnCheckBox: //复选对话框
                //显示对话框    showDialog(DIALOG_CHECKBOX);
    break;
   }
  }
 };
}

4、布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <EditText android:text=""
        android:id="@+id/etText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:editable="false"
        android:cursorVisible="false" />
    <Button android:text="显示普通对话框"
        android:id="@+id/btnNormal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <Button android:text="显示列表话框"
        android:id="@+id/btnList"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <Button android:text="显示单选按钮对话框"
        android:id="@+id/btnRadio"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <Button android:text="显示复选对话框"
        android:id="@+id/btnCheckBox"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

5、数组变量array.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 
resources的使用 
 
resoureces就是res目录下的那些目录和文件,常用的有: 
res/drawable/ 用来存放图片文件 
res/layout/ 用来存放布局定义文件 
res/values/ 用来存放一些变量、参数等文件
-->
<resources>
 <string-array name="hobby">
  <item>游泳</item>
  <item>打篮球</item>
  <item>登山</item>
 </string-array>
</resources>

6、清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.ljq.activity"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".DialogActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
    </application>
    <uses-sdk android:minSdkVersion="4" />
 
</manifest>

 

posted @ 2016-07-26 11:28 家磷 阅读(...) 评论(...) 编辑 收藏
2012-08-19 21:11:49 macleo 阅读数 12
  • Android 6.0运行时权限讲解

    本节课中会对Android 6.0系统中新增的运行时权限功能进行一次透彻的讲解,包含运行时权限的引入背景、基本用法、佳封装实践等,还会讲一些很多人并不知道的运行时权限微技巧。

    12890 人正在学习 去看看 CSDN讲师
android常用对话框封装
[url]http://www.tieguanyin168.com/index.php/android-dialog-853.html[/url]


[url]http://www.cnblogs.com/qingblog/archive/2012/05/30/2526380.html[/url]
[img]http://www.xuanyusong.com/wp-content/uploads/2012/04/b.jpg[/img]
2013-12-12 21:22:47 wangliang198901 阅读数 890
  • Android 6.0运行时权限讲解

    本节课中会对Android 6.0系统中新增的运行时权限功能进行一次透彻的讲解,包含运行时权限的引入背景、基本用法、佳封装实践等,还会讲一些很多人并不知道的运行时权限微技巧。

    12890 人正在学习 去看看 CSDN讲师

                                                                                      android对话框工具类的封装


    /**
     * 对话框
     */
    private static ProgressDialog mProgressDialog;
    
    
    
    
     /**
     * 默认的对话框
     * 标题、内容、两个按钮
     * @param context
     * @param title
     * @param content
     * @param btnOKStr  是空字符的话 该按钮不显示    (特别注意)
     * @param btnCancelStr    是空字符的话 该按钮不显示
     * @param onClick
     */
    public static void showDefaultDialog(Context context,String title,String content,
            String btnOKStr,String btnCancelStr,OnClickListener onClick){
        showDefaultDialog(context, title, content, btnOKStr, btnCancelStr, onClick, null);
    }
    
    /**
     * 默认的对话框 + cancel事件
     * @param context
     * @param title
     * @param content
     * @param btnOKStr
     * @param btnCancelStr
     * @param onClick
     * @param onCancel
     */
    public static void showDefaultDialog(Context context,String title,String content,
            String btnOKStr,String btnCancelStr,
            OnClickListener onClick,OnCancelListener onCancel){
        AlertDialog.Builder mBuilder = new AlertDialog.Builder(context);
        if(title != null){
            mBuilder.setTitle(title);
        }
        mBuilder.setMessage(content);
        
        if(btnOKStr == null)
            btnOKStr = "确定";
        
        if(btnCancelStr == null)
            btnCancelStr = "取消";
        
        if(!btnOKStr.trim().equals(""))
            mBuilder.setPositiveButton(btnOKStr, onClick);
        
        if(!btnCancelStr.trim().equals(""))
            mBuilder.setNegativeButton(btnCancelStr, onClick);
        if(onCancel != null){
            mBuilder.setOnCancelListener(onCancel);
        }
        mBuilder.show();
    }
    
    

    

    public static void showProgressDialog(Context context,String msg,boolean cancelable) {
//        dismissProgressDialog();
        mProgressDialog = new ProgressDialog(context);
        mProgressDialog.setMessage(msg);
        mProgressDialog.setCancelable(cancelable);
        mProgressDialog.show();
    }
    
    public static void dismissProgressDialog(){
        if (mProgressDialog != null && mProgressDialog.isShowing()) {
            mProgressDialog.dismiss();
            mProgressDialog = null;
        }
    }


2016-05-31 16:04:00 wenweidev 阅读数 2239
  • Android 6.0运行时权限讲解

    本节课中会对Android 6.0系统中新增的运行时权限功能进行一次透彻的讲解,包含运行时权限的引入背景、基本用法、佳封装实践等,还会讲一些很多人并不知道的运行时权限微技巧。

    12890 人正在学习 去看看 CSDN讲师

先看效果图:



就是这样的一个简单的问答对话框,防止用户误操作,可能要多处使用,可以封装一下。

第一步:布局文件 dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:background="@null"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:orientation="vertical"
        android:padding="10dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/ivIcon"
                android:layout_width="50dp"
                android:layout_height="50dp" />

            <TextView
                android:id="@+id/tvText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:text="New TextNet" />
        </LinearLayout>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btnCancel"
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:layout_below="@+id/tvContent"
                android:background="#DEDEDE"
                android:text="取消" />

            <View
                android:layout_width="10dp"
                android:layout_height="0dp" />

            <Button
                android:id="@+id/btnSure"
                android:layout_width="100dp"
                android:layout_height="40dp"
                android:layout_alignParentRight="true"
                android:layout_below="@+id/tvContent"
                android:background="#3BB7B8"
                android:text="确认" />
        </LinearLayout>
    </LinearLayout>


</LinearLayout>

第二步:接口类 DialogButtonListener.java

/**
 * Developer : xiongwenwei@aliyun.com
 * Create Time :2016-5-31 10:14:19
 * Function:对话框接口类
 */
public interface DialogButtonListener {

    public void sure();//确认键
    public void cancel();//取消键
}

第三步:Dialog工具类 DialogUtil.java

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.xiong.autodetail.R;
import com.xiong.autodetail.activity.BaseActivity;

/**
 * Developer : xiongwenwei@aliyun.com
 * Create Time :2016-5-31 15:01:50
 * Function:确认操作对话框
 */
public class DialogUtil {

    private AlertDialog dlg;
    private ImageView ivIcon;
    private TextView tvText;
    private Button btnCancel,btnSure;

    private Context context;
    private int imgResId = 0;
    private String text;
    private DialogButtonListener listener;

    public void show(String text, final DialogButtonListener listener) {
        this.context = BaseActivity.getInstance();
        this.text = text;
        this.listener = listener;
        createDialog();
        setValue();
    }

    public void show( int imgResId, String text, final DialogButtonListener listener) {
        this.context = BaseActivity.getInstance();
        this.text = text;
        this.listener = listener;
        this.imgResId = imgResId;
        createDialog();
        setValue();
    }

    public void show(Context context, String text, final DialogButtonListener listener) {
        this.context = context;
        this.text = text;
        this.listener = listener;
        createDialog();
        setValue();
    }

    public void show(Context context, int imgResId, String text, final DialogButtonListener listener) {
        this.context = context;
        this.text = text;
        this.listener = listener;
        this.imgResId = imgResId;
        createDialog();
        setValue();
    }

    //创建Dialog、初始化控件
    private void createDialog() {
        dlg = new AlertDialog.Builder(context).create();
        dlg.show();
        Window window = dlg.getWindow();
        window.setContentView(R.layout.dialog);
        window.setGravity(Gravity.CENTER);//居中
        window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//背景透明
        ivIcon = (ImageView) window.findViewById(R.id.ivIcon);
        tvText = (TextView) window.findViewById(R.id.tvText);
        btnCancel = (Button) window.findViewById(R.id.btnCancel);
        btnSure = (Button) window.findViewById(R.id.btnSure);
    }

    //设置控件值
    private void setValue() {
        if (imgResId != 0) {
            ivIcon.setImageResource(imgResId);
        } else {
            ivIcon.setVisibility(View.GONE);
        }
        tvText.setText(text);
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.cancel();
                dlg.dismiss();
            }
        });
        btnSure.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.sure();
                dlg.dismiss();
            }
        });
    }
}
第四步:代码调用
DialogUtil dialogUtil = new DialogUtil();
        dialogUtil.show(R.drawable.idea, "确认修改吗?", new DialogButtonListener() {
            @Override
            public void sure() {
                ToastUtil.show("点击了确认");
            }

            @Override
            public void cancel() {
                ToastUtil.show("点击了取消");
            }
        });

其它类 BaseActivity.java

private static BaseActivity instance = null;

    @Override
    public void setContentView(int layoutResID) {
        super.setContentView(layoutResID);

        instance = this;
    }

    public static BaseActivity getInstance() {
        return instance;
    }

END !







2014-10-27 16:58:28 coderinchina 阅读数 1007
  • Android 6.0运行时权限讲解

    本节课中会对Android 6.0系统中新增的运行时权限功能进行一次透彻的讲解,包含运行时权限的引入背景、基本用法、佳封装实践等,还会讲一些很多人并不知道的运行时权限微技巧。

    12890 人正在学习 去看看 CSDN讲师
最近在做拼车项目中使用到了一些对话框,并且在很多地方都使用到了,既然很多地方使用到,那么肯定要封装一下,  

android 仿ios 对话框已封装成工具类

博文 来自: coderinchina
没有更多推荐了,返回首页