my_dialog.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="wrap_content"  android:minWidth="280dip"  android:background="#FFFFFFFF">  <TextView  android:id="@+id/dialog_title"  android:layout_width="fill_parent"  android:layout_height="40.0dip"  android:gravity="center_vertical"  android:paddingLeft="10.0dip"  android:text="@string/dialog_title"  android:textSize="20dip"  android:textStyle="bold"  android:textColor="#0087CB"/>  <ImageView  android:layout_height="wrap_content"  android:layout_width="fill_parent"  android:background="@drawable/dialog_sparator"/>  <LinearLayout   android:id="@+id/dialog_content"  android:orientation="vertical"  android:layout_height="wrap_content"  android:layout_width="fill_parent">  <TextView  android:id="@+id/dialog_message"  android:layout_width="fill_parent"  android:layout_height="50.0dip"  android:gravity="center_vertical"  android:paddingLeft="10dip"  android:text="@string/dialog_msg"  android:textSize="20dip"  android:textStyle="bold"  android:textColor="#707070"/>  </LinearLayout>  <LinearLayout  android:orientation="horizontal"  android:layout_width="fill_parent"  android:layout_height="50.0dip"  android:layout_alignParentTop="true"  android:gravity="center">  <Button  android:id="@+id/dialog_back"  android:layout_width="120dip"  android:layout_height="wrap_content"  android:layout_marginRight="5dip"  android:text="@string/dialog_back"  android:textSize="20dip"  android:textColor="#ffffff"  android:textStyle="bold"  android:background="@drawable/dlg_bckbtn_selector"/>  <Button  android:id="@+id/dialog_confirm"  android:layout_width="120dip"  android:layout_height="wrap_content"  android:layout_marginLeft="5dip"  android:text="@string/dialog_exit"  android:textSize="20dip"  android:textColor="#ffffff"  android:textStyle="bold"  android:background="@drawable/dlg_cfgrmbtn_selector"/>  </LinearLayout>  </LinearLayout>

定义Dialog的样式(主题):

<?xml version="1.0" encoding="utf-8"?>
<resources>  <!-- 定义对话框样式 -->  <style name="Dialog" parent="android:style/Theme.Dialog">  <item name="android:windowBackground">@null</item>  <item name="android:windowNoTitle">true</item>  <item name="android:windowIsFloating">true</item>  </style>  </resources>

自定义Dialog的Java代码:

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;  public class MyDialog extends Dialog {  public MyDialog(Context context, int theme) {  super(context, theme);  }  public MyDialog(Context context) {  super(context);  }  /** * Helper class for creating a custom dialog */  public static class Builder {  private Context context;  private String title; // 对话框标题  private String message; // 对话框内容  private String backButtonText; // 对话框返回按钮文本  private String confirmButtonText; // 对话框确定文本  private View contentView;  // 对话框按钮监听事件  private DialogInterface.OnClickListener   backButtonClickListener,  confirmButtonClickListener;  public Builder(Context context) {  this.context = context;  }  /** * 使用字符串设置对话框消息 * @param title * @return */  public Builder setMessage(String message) {  this.message = message;  return this;  }  /** * 使用资源设置对话框消息 * @param title * @return */  public Builder setMessage(int message) {  this.message = (String) context.getText(message);  return this;  }  /** * 使用资源设置对话框标题信息 * @param title * @return */  public Builder setTitle(int title) {  this.title = (String) context.getText(title);  return this;  }  /** * 使用字符串设置对话框标题信息 * @param title * @return */  public Builder setTitle(String title) {  this.title = title;  return this;  }  /** * 设置自定义的对话框内容 * @param v * @return */  public Builder setContentView(View v) {  this.contentView = v;  return this;  }  /** * 设置back按钮的事件和文本 * @param backButtonText * @param listener * @return */  public Builder setBackButton(int backButtonText, DialogInterface.OnClickListener listener) {  this.backButtonText = (String)context.getText(backButtonText);  this.backButtonClickListener = listener;  return this;  }  /** * 设置back按钮的事件和文本 * @param backButtonText * @param listener * @return */  public Builder setBackButton(String backButtonText, DialogInterface.OnClickListener listener) {  this.backButtonText = backButtonText;  this.backButtonClickListener = listener;  return this;  }  /** * 设置确定按钮事件和文本 * @param confirmButtonText * @param listener * @return */  public Builder setConfirmButton(int confirmButtonText, DialogInterface.OnClickListener listener) {  this.confirmButtonText = (String)context.getText(confirmButtonText);  this.confirmButtonClickListener = listener;  return this;  }  /** * 设置确定按钮事件和文本 * @param negativeButtonText * @param listener * @return */  public Builder setConfirmButton(String confirmButtonText, DialogInterface.OnClickListener listener) {  this.confirmButtonText = confirmButtonText;  this.confirmButtonClickListener = listener;  return this;  }  /** * 创建自定义的对话框 */  public MyDialog create() {  LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  // 实例化自定义的对话框主题  final MyDialog dialog = new MyDialog(context, R.style.Dialog);  View layout = inflater.inflate(R.layout.my_dialog, null);  dialog.addContentView(layout,   new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  // 设置对话框标题
            ((TextView) layout.findViewById(R.id.dialog_title)).setText(title);  // 设置对话框内容  if (message != null) {  TextView dlgMsg = (TextView)layout.findViewById(R.id.dialog_message);  dlgMsg.setText(message);  } else if (contentView != null) {  // if no message set  // 如果没有设置对话框内容,添加contentView到对话框主体
                ((LinearLayout) layout.findViewById(R.id.dialog_content)).removeAllViews();  ((LinearLayout) layout.findViewById(R.id.dialog_content)).addView(  contentView, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));  }  // 设置返回按钮事件和文本  if (backButtonText != null) {  Button bckButton = ((Button) layout.findViewById(R.id.dialog_back));  bckButton.setText(backButtonText);  if (backButtonClickListener != null) {  bckButton.setOnClickListener(new View.OnClickListener() {  public void onClick(View v) {  backButtonClickListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE);  }  });  }  } else {  layout.findViewById(R.id.dialog_back).setVisibility(View.GONE);  }  // 设置确定按钮事件和文本  if (confirmButtonText != null) {  Button cfmButton = ((Button) layout.findViewById(R.id.dialog_confirm));  cfmButton.setText(confirmButtonText);  if (confirmButtonClickListener != null) {  cfmButton.setOnClickListener(new View.OnClickListener() {  public void onClick(View v) {  confirmButtonClickListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE);  }  });  }  } else {  layout.findViewById(R.id.dialog_confirm).setVisibility(View.GONE);  }  dialog.setContentView(layout);  return dialog;  }  }  }

MainActivity.java:

package com.example.stuart.customdialog;import android.app.Activity;import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;import android.widget.Button;
import android.widget.Toast;public class MainActivity extends Activity {private Mydialog mydialog;private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn =(Button)findViewById(R.id.button);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Mydialog.Builder builder =new Mydialog.Builder(MainActivity.this);builder.setTitle("提示");builder.setMessage("你要删除吗?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");builder.setConfirmButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {}});builder.setBackButton("返回",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {mydialog.dismiss();}}) ;mydialog=builder.create();mydialog.show();}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}

ref:http://www.bug315.com/article/10.htm

ref:http://www.cnblogs.com/eustoma/p/3937099.html

转载于:https://www.cnblogs.com/stuart/p/4574390.html

Android 自定义dialog相关推荐

  1. android 自定义透明 等待 dialog,Android自定义Dialog内部透明、外部遮罩效果

    Android自定义Dialog内部透明.外部遮罩效果 发布时间:2020-09-09 03:01:41 来源:脚本之家 阅读:117 作者:zst1303939801 本文实例为大家分享了Andro ...

  2. android dialog 消失动画,android 自定义dialog弹出和消失缩放动画

    本文转自:android 自定义dialog,窗口动画 Java代码: package com.sunxu.org.IndividualityDialog; import Android.app.Ac ...

  3. Android自定义拍照上传界面,Android自定义dialog——设置头像(拍照,相册)

    Android自定义dialog--设置头像(拍照,相册) 需求场景:个人信息设置,点击头像,在界面上弹出一个弹框,用户选择"拍照"/"从图库选择",选择照片后 ...

  4. android如何自定义dialog,Android—自定义Dialog

    在 Android 日常的开发中,Dialog 使用是比较广泛的.无论是提示一个提示语,还是确认信息,还是有一定交互的(弹出验证码,输入账号密码登录等等)对话框. 而我们去看一下原生的对话框,虽然随着 ...

  5. android 自定义dialog样式,Android 自定义dialog类

    首先定制style样式 styles.xml 加入自定义样式 @null true true true @color/transparent @color/transparent true 0.6 在 ...

  6. android自定义dialog对话框,android的自定义dialog对话框实现

    Android自定义dialog对话框 一:自定义dialog 如何填充布局 ①自定MyDialog类,在类里关联布局 public class MyDialog extends AlertDialo ...

  7. Android弹出自定义Dialog,android自定义Dialog实现底部弹窗

    android自定义Dialog实现底部弹窗 拿到这个需求,很多人都是直接想用popWindow 实现,但是这样的效果我们完全可以根据系统的Dialog 自定义一个. AlertDialog.Buil ...

  8. android自定义dialog不显示,有关问题解决之Android自定义Dialog无法dismiss

    问题解决之Android自定义Dialog无法dismiss 场景: 点击ListView的一个Item,弹出自定义Dialog.在初始化Dialog时,将一个OnClickListener作为参数传 ...

  9. android dialog 自定义布局,Android自定义Dialog实现加载对话框效果

    前言 最近开发中用到许多对话框,之前都是在外面的代码中创建AlertDialog并设置自定义布局实现常见的对话框,诸如更新提示等含有取消和删除两个按钮的对话框我们可以通过代码创建一个AlertDial ...

  10. Android 自定义Dialog 的使用

    单个Dialog 自定义布局 ,这个只能算半自定义,就是一个弹框布局插入到AlertDialog 中 使用setView 即可 代码如下 AlertDialog.Builder builder = n ...

最新文章

  1. 计算机上的应用商城,Windows 应用商店帐户将应用安装在多达五台电脑上
  2. 大数据遇上大型机 结果会如何?
  3. ubuntu 安装yum_如何在 Linux 中安装微软的 .NET Core SDK | Linux 中国
  4. 绑定变量窥测(Bind Variable Peeking)
  5. Matlab练习:timer(定时器3)
  6. 【nyoj-456】 邮票分你一半 (dp,0-1背包的中点问题)
  7. C++项目中编译部分C的代码
  8. pdf转html插件~~~pdf2htmlEX安装,配置及使用
  9. Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your My
  10. 学校运动会广播稿计算机,学校运动会广播稿【五篇】
  11. winform窗体MaximizeBox
  12. 36 Unicode和字节字符串
  13. 设计模式(一)面向对象设计原则
  14. 基于ASP.NET的数据库连接技术研究
  15. Python 竟然也可以写网页前端了!
  16. NVIDIA-CUDA编程初探
  17. 4 curses库基垫(pad)处理
  18. CSDN博客去广告-谷歌插件
  19. 网络爬虫——票房网数据抓取及存储
  20. 大头菜价格预测详解+模型

热门文章

  1. windows10 下安装、配置、启动mysql
  2. WPF自定义命令(转)
  3. 【bzoj1597- [Usaco2008 Mar]土地购买】斜率优化
  4. Linux CentOS 6.5 + Apache + Mariadb + PHP环境搭建
  5. Eclipse 集成gtk开发环境
  6. java4android (static关键字的作用)
  7. C#操作Word Aspose.Words组件介绍及使用 基本介绍与DOM概述
  8. ubuntu mysql修改字符集后不能启动mysql_解决ubuntu下修改my.cnf设置字符集导致mysql无法启动...
  9. 显示数量_SOLIDWORKS 标注螺纹不显示数量?Why
  10. 打开输入花里胡哨的特殊符号