我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么在Android应用中自定义dialog

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么在Android应用中自定义dialog

这篇文章将为大家详细讲解有关怎么在Android应用中自定义dialog,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Android 自定义dialog

要点:

设置自定义dialog的布局文件my_dialog.xml
2、设置一份自定义的样式文件styles_wx.xml,该文件用于覆盖Android的默认主题样式,如黑色边框等。
3、Java代码继承Dialog实现自定义类MyDialog,实现自定义布局,还有设置窗口的大小、位置等。

代码

Part1.styles_wx.xml

<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android">    <!-- 微信弹窗 -->   <style name="wx_dialog" parent="@android:style/Theme.Dialog">     <item name="android:windowFrame">@null</item> <!-- 边框 -->     <item name="android:windowIsFloating">true</item> <!-- 是否浮现在activity之上 -->     <item name="android:windowIsTranslucent">false</item> <!-- 半透明 -->     <item name="android:windowNoTitle">true</item> <!-- 无标题 -->     <item name="android:windowBackground">@drawable/transparent</item> <!-- 自己想要的背景 -->     <item name="android:backgroundDimEnabled">true</item> <!-- 背景内容模糊 -->   </style>  </resources>

注意,此处:

<item name="android:windowBackground">@drawable/transparent</item>

这是设置对话框弹出背景,尝试设置@null,仍然是黑色背景,在使用半透明图片时会受其影响。

所以,可以在这里指定你想要的背景图片或者颜色。

我为了灵活性,我设置该属性为名为"transparent"的图片,这是一张1*1的透明图片。这样背景完全透明,真正使用的背景在my_dialog.xml里定义

Part2.my_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:background="@drawable/frame_white"   android:orientation="vertical"   android:padding="15dp" >    <TextView     android:id="@+id/tvTitle"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="@string/systitle"     android:textSize="18sp" />     <!-- 分隔符用 -->    <TextView     android:id="@+id/tvSeparator"          android:layout_marginBottom="5dp"     android:layout_marginTop="5dp" />    <TextView     android:id="@+id/tvText"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="@string/sysText"     android:textSize="18sp" />    <!-- 该RelativeLayout作为子视图容器 -->    <RelativeLayout     android:id="@+id/rlContent"     android:layout_width="match_parent"     android:layout_height="wrap_content" >   </RelativeLayout>    <RelativeLayout     android:layout_width="match_parent"     android:layout_height="match_parent"     android:layout_marginTop="10dp"     android:orientation="horizontal" >      <TextView       android:id="@+id/tvButton2"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:layout_alignParentRight="true"       android:layout_marginLeft="10dp"       android:background="@drawable/selector_text_button"       android:clickable="true"       android:paddingBottom="5dp"       android:paddingLeft="15dp"       android:paddingRight="15dp"       android:paddingTop="5dp"       android:text="@string/ok"       android:textColor="@color/wx_text_link"       android:textSize="14sp"       android:visibility="visible" />      <TextView       android:id="@+id/tvButton1"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:layout_alignWithParentIfMissing="true"       android:layout_marginLeft="10dp"       android:layout_toLeftOf="@id/tvButton2"       android:background="@drawable/selector_text_button"       android:clickable="true"       android:paddingBottom="5dp"       android:paddingLeft="15dp"       android:paddingRight="15dp"       android:paddingTop="5dp"       android:text="@string/cancel"       android:textColor="@color/wx_text_link"       android:textSize="14sp" />   </RelativeLayout>  </LinearLayout>

Part3.MyDialog.java

package com.kwws;  import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.RelativeLayout; import android.widget.TextView;  import com.navigator.R;   public class MyDialog extends Dialog {        // 数据   String title = "title";   String text = "text";   String cancelButtonText = "cancel";   String okButtonText = "ok";   int okColor = -1;   int cancelColor = -1;    // UI   Context mContent;   TextView tvTitle;   TextView tvSeparator;   TextView tvText;   TextView tvBtn1;   TextView tvBtn2;   RelativeLayout childViewWrapper;// 子组件容器       public MyDialog(Context context, String title, String text,       String cancelButtonText, String okButtonText) {     super(context, R.style.wx_dialog);// 样式定义,该样式去除android默认的黑色背景边框等。     this.mContent = context;     setDialogStyle(title, text, cancelButtonText, okButtonText);   }    @Override   protected void onCreate(Bundle savedInstanceState) {     // TODO Auto-generated method stub     super.onCreate(savedInstanceState);     LayoutInflater layout = LayoutInflater.from(mContent);     View view = layout.inflate(R.layout.my_dialog, null);     setContentView(view);     findView();     initView();     initViewEvent();   }    private void setDialogStyle(String title, String text,       String cancelButtonText, String okButtonText) {     this.title = title;     this.text = text;     this.cancelButtonText = cancelButtonText;     this.okButtonText = okButtonText;   }    private void findView() {     tvTitle = (TextView) findViewById(R.id.tvTitle);     tvSeparator = (TextView) findViewById(R.id.tvSeparator);     tvText = (TextView) findViewById(R.id.tvText);     tvBtn1 = (TextView) findViewById(R.id.tvButton1);     tvBtn2 = (TextView) findViewById(R.id.tvButton2);     childViewWrapper = (RelativeLayout) findViewById(R.id.rlContent);   }    private void initView() {     if (title == null) {       tvTitle.setVisibility(View.GONE);       tvSeparator.setVisibility(View.GONE);     } else {       tvTitle.setVisibility(View.VISIBLE);       tvSeparator.setVisibility(View.VISIBLE);       tvTitle.setText(title);     }     if (text == null) {       tvText.setVisibility(View.GONE);     } else {       tvText.setVisibility(View.VISIBLE);       tvText.setText(text);     }     if (cancelButtonText == null) {       tvBtn1.setVisibility(View.GONE);     } else {       tvBtn1.setVisibility(View.VISIBLE);       tvBtn1.setText(cancelButtonText);       if (cancelColor != -1) {         tvBtn1.setTextColor(cancelColor);       }     }     if (okButtonText == null) {       tvBtn2.setVisibility(View.GONE);     } else {       tvBtn2.setVisibility(View.VISIBLE);       tvBtn2.setText(okButtonText);       if (okColor != -1) {         tvBtn2.setTextColor(okColor);       }     }      if (childViewWrapper != null && childView != null) {       childViewWrapper.addView(childView);     }      // 设置对话框大小     Window dialogWindow = getWindow();     WindowManager.LayoutParams lp = dialogWindow.getAttributes();     DisplayMetrics d = mContent.getResources().getDisplayMetrics();     // 获取屏幕宽、高用     lp.width = (int) (d.widthPixels * 0.8); // 高度设置为屏幕的0.8     dialogWindow.setAttributes(lp);   }    private void initViewEvent() {     View.OnClickListener listener = new View.OnClickListener() {        @Override       public void onClick(View v) {         // TODO Auto-generated method stub         switch (v.getId()) {         case R.id.tvButton1:           if (mListener != null) {             mListener.onCancelButtonClick(MyDialog.this, v);           }           break;         case R.id.tvButton2:           if (mListener != null) {             mListener.onOKButtonClick(MyDialog.this, v);           }           break;         default:           break;         }       }     };     tvBtn1.setOnClickListener(listener);     tvBtn2.setOnClickListener(listener);   }    public interface OnDialogButtonClickListener {     void onCancelButtonClick(MyDialog dialog, View view);      void onOKButtonClick(MyDialog dialog, View view);   }    private OnDialogButtonClickListener mListener;       public void setOnDialogButtonClickListener(       OnDialogButtonClickListener listener) {     this.mListener = listener;   }       public void setOKButtonTextColor(int color) {     this.okColor = color;   }       public void setCancelButtonTextColor(int color) {     this.cancelColor = color;   }    View childView;       public void setChildView(View view) {     childView = view;   } }

Part4.使用

// 退出提示框 public void exitDialog() {    MyDialog dialog = new MyDialog(this, "提示", "确认退出?", "取消", "退出");   dialog.setOKButtonTextColor(getResources().getColor(R.color.red));   dialog.setOnDialogButtonClickListener(new OnDialogButtonClickListener() {      @Override     public void onOKButtonClick(MyDialog dialog, View view) {       finish();     }      @Override     public void onCancelButtonClick(MyDialog dialog, View view) {       dialog.dismiss();     }   });   dialog.show(); }
   private void showConfigDialog() {     // 读取参数     final SharedPreferencesHelper helper = new SharedPreferencesHelper(         this, "config");     final String ip = helper.getValue("serverip");     final String port = helper.getValue("serverport");      // 配置界面 输入IP和端口的简单界面,这里就不附xml了     View view = getLayoutInflater().inflate(R.layout.dialog_config, null);     final EditText etIP = (EditText) view.findViewById(R.id.etIP);     final EditText etPort = (EditText) view.findViewById(R.id.etPort);     etIP.setText(ip != null ? ip : Ksoap2Helper.getServerIP());     etPort.setText(port != null ? port : String.valueOf(Ksoap2Helper         .getServerPort()));      // 配置对话框     MyDialog dialog = new MyDialog(this, "参数配置", null, "取消", "确定");     // 添加配置界面到对话框     dialog.setChildView(view);     // 按钮监听     dialog.setOnDialogButtonClickListener(new OnDialogButtonClickListener() {        @Override       public void onOKButtonClick(MyDialog dialog, View view) {         // 保存配置         String newIP = etIP.getText().toString();         String newPort = etPort.getText().toString();          if (true) {           helper.putValue("serverip", newIP);           Ksoap2Helper.setServerIP(newIP);         }         if (true) {           helper.putValue("serverport", newPort);           Ksoap2Helper.setServerPort(Integer.valueOf(newPort));         }         dialog.dismiss();       }        @Override       public void onCancelButtonClick(MyDialog dialog, View view) {         dialog.dismiss();       }     });     dialog.show();   }

关于怎么在Android应用中自定义dialog就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么在Android应用中自定义dialog

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在Android应用中自定义dialog

这篇文章将为大家详细讲解有关怎么在Android应用中自定义dialog,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Android 自定义dialog要点:1、设置自定义dialog的布局
2023-05-31

如何在Android中自定义Dialog

本篇文章为大家展示了如何在Android中自定义Dialog,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。功能:android 提供给我们的只有2种Dialog 即 AlertDialog & Pr
2023-05-31

Android怎么自定义弹框Dialog效果

今天小编给大家分享一下Android怎么自定义弹框Dialog效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。具体效果如下
2023-06-30

ContentProvider怎么在Android应用中实现自定义

这篇文章给大家介绍ContentProvider怎么在Android应用中实现自定义,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1,创建一个数据库帮助类,归根结底都是它在操作数据库。代码如下:package com.
2023-05-31

Android编程中自定义dialog用法实例

本文实例讲述了Android编程中自定义dialog用法。分享给大家供大家参考,具体如下: dialog是android中提供的一组弹出提示框,非常好用,可是它的样式是一个定式,有时候我们需求定义一些自己的样式 1、定义一个样式文件,此文件
2022-06-06

Android中用Builder模式自定义Dialog的方法

前言 我们开发人员在实际项目过程中遇到的需求是多种多样的,有时我们要匹配APP自己的设计风格,有时我们会觉得系统的对话框使用起来不够自由,因此自己定义一个适合自己的Dialog是很有必要的。 为什么要用Builder模式 Builder设计
2022-06-06

android自定义dialog的方法是什么

Android中自定义Dialog的方法有以下几种:1. 创建一个继承自Dialog类的自定义对话框:- 创建一个新的类,继承自Dialog类。- 在构造方法中设置对话框的样式和布局,以及其他需要自定义的属性。- 可以通过重写onCreat
2023-09-21

Android怎么自定义样式圆角dialog对话框

这篇文章主要介绍“Android怎么自定义样式圆角dialog对话框”,在日常操作中,相信很多人在Android怎么自定义样式圆角dialog对话框问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android
2023-06-25

怎么在Android应用中监听Dialog窗体

怎么在Android应用中监听Dialog窗体?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。test.class代码package com.test;impor
2023-05-31

如何在Android应用中实现自定义View

本篇文章为大家展示了如何在Android应用中实现自定义View,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android自定义view的种类自定义view大概可以分为四个大类,主要是通过实现方式
2023-05-31

Android中自定义对话框(Dialog)的实例代码

1.修改系统默认的Dialog样式(风格、主题)2.自定义Dialog布局文件3.可以自己封装一个类,继承自Dialog或者直接使用Dialog类来实现,为了方便以后重复使用,建议自己封装一个Dialog类 第一步:  我们知道Androi
2022-06-06

Android应用中怎么实现自定义状态栏

这篇文章给大家介绍Android应用中怎么实现自定义状态栏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、目标:Android5.0以上二、步骤1、在res-values-colors.xml下新建一个RGB颜色
2023-05-31

Android应用中怎么自定义一个菜单栏

这期内容当中小编将会给大家带来有关Android应用中怎么自定义一个菜单栏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在android开发的过程中系统自带的菜单往往满足不了开发中的一些需求,比如说一排最
2023-05-31

如何在Android应用中自定义一个控件

本篇文章为大家展示了如何在Android应用中自定义一个控件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。开发自定义控件的步骤:1、了解View的工作原理 2、 编写继承自View的子类3、 为自定
2023-05-31

Android中Dialog如何自定义上下文花式菜单

这篇文章主要为大家展示了“Android中Dialog如何自定义上下文花式菜单”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android中Dialog如何自定义上下文花式菜单”这篇文章吧。先自
2023-05-30

怎么在Android中接收自定义广播

本篇文章给大家分享的是有关怎么在Android中接收自定义广播,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。MainActivity.java代码:package com.he
2023-06-15

怎么在Android中自定义一个控件

怎么在Android中自定义一个控件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码class SleepDayChart(context: Context, attrs:
2023-06-14

Android 自定义一套 Dialog通用提示框 (代码库)

做Android开发五年了,期间做做停停(去做后台开发,服务器管理),当回来做Android的时候,发现很生疏,好些控件以前写得很顺手,现在好像忘记些什么了,总要打开这个项目,打开那个项目,有时未必还找得到。 总结起来,还
2022-06-06

Android中制作自定义dialog对话框的实例分享

自定义dialog基础版 很多时候,我们在使用android sdk提供的alerdialog的时候,会因为你的系统的不同而产生不同的效果,就好比如你刷的是MIUI的系统,弹出框都会在顶部显示!这里简单的介绍自定义弹出框的应用。 首先创建布
2022-06-06

Android中怎么自定义相机

本篇文章给大家分享的是有关Android中怎么自定义相机,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用Android 系统相机的方法:要想让应用有相机的action,咱们就
2023-05-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录