安卓Dialog封装
来源:互联网 发布:网络之大神我只是路过 编辑:程序博客网 时间:2024/06/10 17:01
安卓项目中常用到对话框的显示,用来提示一些信息或者是需要输入信息接收的,因此进行了一次简单的封装,后续大家可以在次基础上进行扩展~~
package com.iven.app.view;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.os.Handler;import android.os.Message;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.util.Log;import android.view.Display;import android.view.Gravity;import android.view.KeyEvent;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.TextView;import com.iven.app.R;import static android.R.attr.gravity;/** * @author Iven * @date 2017/1/2 13:31 * @Description 统一的Dialog封装 */public class DialogUtils {//Dialogprivate Dialog mDialog;private Context context;private boolean isCancelable;//是否可以取消private DialogClickListener eventListener;// 按钮点击回调/** * 显示文本相关 */private String title = "";// 标题private String content = "";// 内容private String leftText = "";// 左按钮显示的文字private String rightText = "";// 右按钮显示的文字private TextView dialog_textView_title, dialog_textView_content, dialog_textView_left, dialog_textView_right, dialog_textView_segment;private LinearLayout dialog_layout_button;private String hint;private String tip;// TODO: 2017/1/9boolean isBold = false;//字体是否加粗//是否显示左侧的图标private boolean isShowDrawable;private int leftDdrawable = 0;private int rightDdrawable = 0;private int imgId;//设置图片private int leftColor = -1;private int rightColor = -1;private Handler mHandler;private EditText et_alias;public DialogUtils(Context context, boolean isCancelable) { this.context = context; this.isCancelable = isCancelable; leftColor = -1; rightColor = -1;}/** * @param context context * @param isCancelable true=可取消 * @param eventListener 监听 */public DialogUtils(Context context, boolean isCancelable, DialogClickListener eventListener) { this.context = context; this.isCancelable = isCancelable; this.eventListener = eventListener;}/** * @param context context * @param title 标题 * @param content 描述内容 * @param leftText 左侧按钮文字 * @param rightText 右侧按钮文字 * @param isShowDrawable 是否显示对号图片 * @param handler Handler * @param eventListener 监听 * @param tip 提示信息 */public void setDialogVerify(Context context, String title, String content, String leftText, String rightText, String tip, boolean isShowDrawable, Handler handler, DialogClickListener eventListener) { this.context = context; this.title = title; this.content = content; this.leftText = leftText; this.rightText = rightText; this.tip = tip; this.isShowDrawable = isShowDrawable; this.eventListener = eventListener; this.mHandler = handler;}public void setDialogVerify(Context context, String title, String content, String leftText, String rightText, String tip, boolean isShowDrawable, Handler handler, boolean isBold, DialogClickListener eventListener) { this.context = context; this.title = title; this.content = content; this.leftText = leftText; this.rightText = rightText; this.tip = tip; this.isShowDrawable = isShowDrawable; this.eventListener = eventListener; this.mHandler = handler; this.isBold = isBold;}/** * 带有EditText的 */public void setDialogVerify(Context context, String title, String content, String hint, String leftText, String rightText, String tip, boolean isShowDrawable, Handler handler, DialogClickListener eventListener) { this.context = context; this.title = title; this.content = content; this.hint = hint; this.leftText = leftText; this.rightText = rightText; this.tip = tip; this.isShowDrawable = isShowDrawable; this.eventListener = eventListener; this.mHandler = handler;}/** * 显示dialog * * @param */public void showStandardDialog() { showDialog(Gravity.CENTER);}/** * 显示提示信息的Dialog */private void showDialog(int center) { try { if (mDialog != null) { mDialog.cancel(); } } catch (Exception e) { e.printStackTrace(); } DialogInterface.OnKeyListener keyListener = new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { return keyCode == KeyEvent.KEYCODE_HOME || keyCode == KeyEvent.KEYCODE_SEARCH; } }; try { View view = View.inflate(context, R.layout.common_dialog, null); dialog_textView_title = (TextView) view.findViewById(R.id.dialog_textView_title);//标题 dialog_textView_content = (TextView) view.findViewById(R.id.dialog_textView_content);//内容 dialog_textView_left = (TextView) view.findViewById(R.id.dialog_textView_left);//左按钮 dialog_textView_right = (TextView) view.findViewById(R.id.dialog_textView_right);//右按钮 dialog_layout_button = (LinearLayout) view.findViewById(R.id.dialog_layout_button);//按钮栏 dialog_textView_segment = (TextView) view.findViewById(R.id.dialog_textView_segment);//按钮之间分割线 if (isBold) {//粗体字 dialog_textView_title.getPaint().setFakeBoldText(true);//标题 dialog_textView_content.getPaint().setFakeBoldText(true);//内容 dialog_textView_left.getPaint().setFakeBoldText(true); dialog_textView_right.getPaint().setFakeBoldText(true); } //标题 if (!TextUtils.isEmpty(title)) { dialog_textView_title.setText(title); } else { dialog_textView_title.setVisibility(View.GONE); } //内容 if (null == content || "".equals(content)) { dialog_textView_content.setVisibility(View.GONE); } else { dialog_textView_content.setGravity(gravity); dialog_textView_content.setText(content); } //隐藏按钮栏 if ((null == leftText || "".equals(leftText)) && (null == rightText || "".equals(rightText))) { dialog_layout_button.setVisibility(View.GONE); } setTextColor(dialog_textView_left, dialog_textView_right); if (null == leftText || "".equals(leftText)) { dialog_textView_left.setVisibility(View.GONE); dialog_textView_segment.setVisibility(View.GONE); } else { dialog_textView_left.setText(leftText); } if (null == rightText || "".equals(rightText)) { dialog_textView_right.setVisibility(View.GONE); dialog_textView_segment.setVisibility(View.GONE); } else { dialog_textView_right.setText(rightText); } dialog_textView_left.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog_textView_right.setOnClickListener(null); eventListener.leftEvent(); } }); dialog_textView_right.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog_textView_left.setOnClickListener(null); eventListener.rightEvent(); } }); mDialog = new Dialog(context, R.style.dialog_background_dimEnabled);//添加相应的样式 mDialog.setContentView(view);//设置显示的布局文件 /** 将对话框的大小按屏幕大小的百分比设置 **/ resetDialogSize(); mDialog.setCancelable(isCancelable); mDialog.setCanceledOnTouchOutside(isCancelable); if (!isCancelable) { mDialog.setOnKeyListener(keyListener); } mDialog.show(); } catch (Exception e) { Log.e("exception", "e==== " + e); }}/** * 显示EditText的Dialog */public void showAliasDialog() { try { if (mDialog != null) { mDialog.cancel(); } } catch (Exception e) { e.printStackTrace(); } View view = View.inflate(context, R.layout.dialog_edittext, null); TextView tv_title = (TextView) view.findViewById(R.id.dialog_tv_title); et_alias = (EditText) view.findViewById(R.id.dialog_et_alias); final TextView tv_left_ok = (TextView) view.findViewById(R.id.dialog_tv_left); TextView tv_right_skip = (TextView) view.findViewById(R.id.dialog_tv_right); setTextColor(tv_left_ok, tv_right_skip); /** 添加监听 */ et_alias.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub if (s.length() > 0) { tv_left_ok.setClickable(true); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub String s1 = s.toString(); } }); /** 左侧确定按钮点击事件 */ tv_left_ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Message message = new Message(); message.what = 0; message.obj = et_alias.getText().toString(); if (mHandler != null) { mHandler.sendMessage(message); } if (eventListener != null) { eventListener.leftEvent(); } } }); /** 右侧确定按钮点击事件 */ tv_right_skip.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (eventListener != null) { eventListener.rightEvent(); } } }); mDialog = new Dialog(context, R.style.dialog_background_dimEnabled); mDialog.setContentView(view); Window dialogWindow = mDialog.getWindow(); dialogWindow.setGravity(Gravity.CENTER); resetDialogSize(); mDialog.setCancelable(isCancelable); mDialog.setCanceledOnTouchOutside(isCancelable); mDialog.show();}/** * 获取edittext输入的内容 */public String getEdittextContent() { if (et_alias != null) { Editable text = et_alias.getText(); if (text != null) { return text.toString(); } else return ""; } else { return ""; }}/** * 显示dialog * * @param contentGravity 显示内容gravity */public void showStandardDialog(int contentGravity) { showDialog(contentGravity);}/** * 重置dialog的大小及位置 */private void resetDialogSize() { Window dialogWindow = mDialog.getWindow(); dialogWindow.setGravity(Gravity.CENTER); /* * 将对话框的大小按屏幕大小的百分比设置 */ WindowManager m = dialogWindow.getWindowManager(); Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值 // p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.6 p.width = (int) (d.getWidth() * 0.75); // 宽度设置为屏幕的0.65 p.height = WindowManager.LayoutParams.WRAP_CONTENT; dialogWindow.setAttributes(p);}/** * 给两个按钮设置颜色 * * @param leftText 左 * @param rightText 右 */private void setTextColor(TextView leftText, TextView rightText) { if (leftColor != -1) { leftText.setTextColor(leftColor); } if (rightColor != -1) { rightText.setTextColor(rightColor); }}/** * 关闭dialog * * @param */public void closeDilog() { if (mDialog != null) { try { mDialog.dismiss(); mDialog = null; } catch (Exception e) { e.printStackTrace(); } }}public interface DialogClickListener { /** * 左按钮点击事件 */ void leftEvent(); /** * 右按钮点击事件 */ void rightEvent();}}
Style样式:
<!-- dialog 样式 activity变暗 --><style name="dialog_background_dimEnabled" parent="@android:style/Theme.Dialog"> <item name="android:backgroundDimEnabled">true</item> <!-- activity 变暗 dd--> <item name="android:windowIsFloating">true</item> <!-- 是否浮现在activity之上 --> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowFrame">@null</item> <item name="android:windowIsTranslucent">true</item> <!-- 半透明 --> <item name="android:textColor">@color/color_black</item></style><style name="gray_text_middle"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textSize">@dimen/normal_font</item> <item name="android:textColor">@color/color_grays</item></style><style name="textViewNoPadding"> <item name="android:lineSpacingMultiplier">0.9</item> <item name="android:includeFontPadding">false</item></style>
涉及到的文字以及颜色,自行设定就好~~
1 0
- 安卓Dialog封装
- 安卓缓冲dialog对话框,创建+使用+封装
- 【安卓知识点汇总】Dialog和Toast封装
- 安卓控件Dialog
- 安卓dialog主题
- 安卓自定义Dialog
- 安卓dialog
- 安卓自定义dialog文章
- 安卓开发自定义dialog
- 安卓dialog的实现
- 安卓自定义透明Dialog
- 安卓数据库封装
- 安卓OkHttp封装
- Dialog封装
- Dialog封装
- 安卓ApiDemos学习 app/Dialog
- 【安卓笔记】盘点android中的dialog
- 安卓使用Dialog创建普通对话框
- JD京东物流电子面单接口对接文档-快递鸟
- uva11542 Square
- 使用iText生成pdf文件
- Oracle中to_char的用法
- UpdatePanel控件使用
- 安卓Dialog封装
- Nova启动虚拟机执行过程
- [FAQ18962][voip call]使用skype、line、微信等apk进行voip通话,出现回音、啸叫、杂音、卡顿等现象
- 限制客户端访问服务器算法
- AFNetworking 使用HTTPS请求 添加证书
- 日常记录20170112----去除字符串前面所以的0
- 【jzoj4935】【构造】
- 欢迎使用CSDN-markdown编辑器
- git 上传项目到服务器