文章目录

  • 1 AlertDialog
    • 1.1 普通对话框的创建
  • 2 自定义对话框
    • 2.1 自定义对话框的创建步骤
  • 3 PopupWindow
    • 3.1 PopupWindow介绍
  • 4 ArrayAdapter
    • 4.1 ArrayAdapter的介绍及使用

Android中的常用对话框:

  • AlertDialog
  • 自定义Dialog
  • PopupWindow

1 AlertDialog

1.1 普通对话框的创建

利用AlertDialog中的构建器(Builder)来完成。

下面看下创建AlertDialog的两种方法:

// 第一种方法
public void myClick(View view) {switch (view.getId()){case R.id.normal_dialog_btn://AlertDialog的构造方法时protectedAlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("提示");builder.setMessage("您确定退出程序吗?");builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {finish();}});builder.setNegativeButton("取消",null);builder.show();
//                AlertDialog dialog = builder.create();
//                dialog.show();break;}}// 第二种方法
public void showNormalDialog(){AlertDialog dialog = new AlertDialog.Builder(this).create();dialog.setTitle("提示");dialog.setMessage("您确定退出程序吗?");dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {}});dialog.show();}

还是第一种方法使用起来比较简单。


2 自定义对话框

2.1 自定义对话框的创建步骤

先来看下自定义对话框的效果:

然后看下自定义对话框的创建步骤:

  1. 自定义xml文件设计对话框布局。
  2. 自定义一个style资源为对话框去标题栏、背景。
  3. 自定义一个类继承于Dialog,用于编写自定义对话框的逻辑代码。
  4. 实例化自定义对话框并显示。

设置布局xml如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center_horizontal"android:background="@mipmap/dialog_bg"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="真的要退出吗?"android:textSize="34sp"android:textColor="#e61414"android:textStyle="bold"android:layout_marginTop="265dp"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_margin="25dp"><Buttonandroid:id="@+id/yes_btn"android:layout_width="120dp"android:layout_height="50dp"android:background="@mipmap/yes_btn"/><Buttonandroid:id="@+id/no_btn"android:layout_width="120dp"android:layout_height="50dp"android:background="@mipmap/no_btn"android:layout_marginLeft="20dp"/></LinearLayout>
</LinearLayout>

设置style如下:

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style><style name="mydialog" parent="android:style/Theme.Dialog"><item name="android:windowNoTitle">true</item><item name="android:windowBackground">@android:color/transparent</item></style>
</resources>

自定义Dialog:

package com.example.dialogdemo;import android.app.Dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.View;public class MyDialog extends Dialog {public MyDialog(@NonNull final Context context, int themeResId) {super(context, themeResId);//为对话框设置布局setContentView(R.layout.dialog_layout);findViewById(R.id.yes_btn).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {System.exit(0);}});findViewById(R.id.no_btn).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {dismiss();}});}
}

创建并显示Dialog非常简单:

MyDialog md = new MyDialog(this,R.style.mydialog);
md.show();

3 PopupWindow

3.1 PopupWindow介绍

先来看一下PopupWindow的效果:

下面看一下PopupWindow的使用步骤:

  1. 创建PopupWindow对象实例。
  2. 设置背景、注册事件监听器和添加动画。
  3. 显示PopupWindow。

下面看下动画的类型,主要有移动、透明、缩放、旋转几种类型:

我们需要先自定义一个布局,布局的xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:background="#00ffff"android:padding="2dp"><TextViewandroid:id="@+id/choose"android:layout_width="60dp"android:layout_height="30dp"android:text="选择"android:textColor="#ffffff"android:gravity="center"android:background="#000000"/><Viewandroid:layout_width="2dp"android:layout_height="30dp"android:background="#00ffff" /><TextViewandroid:id="@+id/choose_all"android:layout_width="60dp"android:layout_height="30dp"android:text="全选"android:textColor="#ffffff"android:gravity="center"android:background="#000000"/><Viewandroid:layout_width="2dp"android:layout_height="30dp"android:background="#00ffff" /><TextViewandroid:id="@+id/copy"android:layout_width="60dp"android:layout_height="30dp"android:text="复制"android:textColor="#ffffff"android:gravity="center"android:background="#000000"/></LinearLayout>

下面看一下PopupWindows的显示:

//设置PopupWindowpublic void showPopupWindow(View view) {//准备弹窗所需要的视图对象View v = LayoutInflater.from(this).inflate(R.layout.popup_layout,null);//1.实例化对象//参数1:用在弹窗中的View//参数2、3:弹窗的宽高//参数4(focusable):能否获取焦点//注意:这里的单位是像素,而xml中我们使用的dp为单位final PopupWindow window = new PopupWindow(v,190,35,true);//2.设置(背景、动画)//设置背景window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//设置能响应外部的点击事件window.setOutsideTouchable(true);//设置能响应点击事件window.setTouchable(true);//①创建动画资源   ②创建一个style应用动画资源    ③对当前弹窗的动画风格设置为第二部的资源索引//演示的为移动动画window.setAnimationStyle(R.style.translate_anim);//3.显示//参数1(anchor):锚//参数2、3:相对于锚在x、y方向上的偏移量window.showAsDropDown(view,-190,0);//为弹窗中的文本添加点击事件 findViewById直接调用只能找到当前Activity所对应的控件v.findViewById(R.id.choose).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(MainActivity.this,"您点击了选择",Toast.LENGTH_SHORT).show();window.dismiss();   //控制弹窗消失}});v.findViewById(R.id.choose_all).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(MainActivity.this,"您点击了全选",Toast.LENGTH_SHORT).show();window.dismiss();}});v.findViewById(R.id.copy).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(MainActivity.this,"您点击了复制",Toast.LENGTH_SHORT).show();window.dismiss();}});}

下面看一下动画资源和style的定义:

我们需要先创建anim文件夹,然后再创建相应的xml文件:

看下xml文件:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromXDelta="0"android:toXDelta="0"android:fromYDelta="300"android:toYDelta="0"android:duration="2000"></translate>
</set>

然后看下style文件,如下:

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style><style name="mydialog" parent="android:style/Theme.Dialog"><item name="android:windowNoTitle">true</item><item name="android:windowBackground">@android:color/transparent</item></style><style name="translate_anim"><item name="android:windowEnterAnimation">@anim/translate</item></style>
</resources>

4 ArrayAdapter

4.1 ArrayAdapter的介绍及使用

数组适配器,只能用来显示单一的文本。构造方法如下:

要实现的效果如下:

先来看下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:orientation="horizontal"android:padding="10dp"android:gravity="center_vertical"><ImageViewandroid:id="@+id/item_icon"android:layout_width="40dp"android:layout_height="40dp"android:src="@mipmap/star"/><TextViewandroid:id="@+id/item_txt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="测试"android:layout_marginLeft="15dp"/>
</LinearLayout>

再来看下java代码的实现:

private void showArrayDialog() {final String[] items = {"Java","Mysql","Android","HTML","C","JavaScript"};//数组适配器//参数1:环境//参数2:布局资源索引,指的是每一项数据所呈现的样式android.R.layout.xxx//参数3:数据源
//        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,items);//参数3:int textviewid:指定文本需要放在布局中对应id文本控制的位置ArrayAdapter adapter = new ArrayAdapter(this,R.layout.array_item_layout,R.id.item_txt,items);AlertDialog.Builder builer = new AlertDialog.Builder(this).setTitle("请选择")//参数1:适配器对象(对数据显示样式的规则制定器)//参数2:监听器.setAdapter(adapter, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Toast.makeText(MainActivity.this,items[i],Toast.LENGTH_SHORT).show();dialogInterface.dismiss();}});builer.show();}

Android中的Dialog相关推荐

  1. Android中自定义Dialog外形,去除黑底和白色边框

    在做Android开发中经常会使用到自定义样式的Dialog,尤其是在游戏当中,大家通常都是通过自定义一个布局文件来设置Dialog中显示的内容,但是仅仅这样还是不行的~会有黑色的框和白色的边.这就需 ...

  2. 改变Android中默认Dialog的样式

    Android中默认的Dialog是黑白色的,有点丑啊! 在清单文件中application的标签属性中theme,默认的是: android:theme="@style/AppTheme& ...

  3. Android中根据dialog的展示与否控制软键盘的显示与隐藏

    好久没有写博客,今天一直在解决一个根据弹框的展示与否来控制软键盘是否展示的问题. 本文用于记录关键点. 关键点:1.该弹框包含一个输入框Edittext ,所以需要根据确定与取消按钮来控制软件盘的展示 ...

  4. Android中各种dialog

    第一种:普通dialog AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable. ...

  5. android的自定义dialog样式,如何自定义Android Dialog的样式?

    如何自定义Android Dialog的样式?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何自定义Android ...

  6. Android中修改弹出dialog背景无色透明,弹出时有遮罩

    先在styles.xml中写入下面样式 1 <style name="dialog" parent="@android:style/Theme.Dialog&quo ...

  7. Android在Service中显示Dialog

    在Service中弹出一个Dialog对话框 第1步:在应用的AndroidManifest.xml中需要添加权限.没有无法显示. <uses-permission android:name=& ...

  8. 浅谈android中的自定义封装易用的Dialog

    转载地址:http://blog.csdn.net/u013064109/article/details/51990526 好久没写Android的博客,最近在做一个android的项目,里面用到我们 ...

  9. (20120731)Android中的各种对话框总结(dialog)

    android中的对话框形式大致分为四种,分别是一般对话框形式,列表对话框形式,单选对话框形式,多选对话框形式 另外一种是登录对话框形式 下面一一对这几种对话框进行详细的讲解 1.一般对话框 butt ...

最新文章

  1. 特斯拉FSD车端感知解析
  2. ubuntu虚拟机开机无法进入系统(initramfs)
  3. 买走5355.5万张床垫的年轻人,实现“深睡自由”了吗?
  4. 使用UIImageView实现图像拖动、缩放等
  5. sql和sqlite常用查询语句
  6. 微服务开发的入门级框架Spring Boot详解:注解
  7. python怎么分析数据结构_《利用Python进行数据分析》第五章-pandas的数据结构介绍...
  8. Sublime Text 3 插件安装及Vim 模式设置
  9. python-14:迭代器 生成器,3种方法:g.__next__() next(g) g.send(value)
  10. OpenCV--SVM多分类问题
  11. OpenNLP初尝试--自然语言处理
  12. Dapr for dotnet | 服务调用-Service invoke(HTTP协议)
  13. 生命中最重要的是什么?---9人的临终遗言
  14. U盘量产后USB鼠标和键盘都无法使用,如何解决?
  15. 黑马程序员前端JavaScript高级——ES6学习笔记
  16. 北京智源大会 | AI + 医疗的下一个十年:从公共卫生预警到人类基因密码破解 道翰天琼认知智能api机器人接口1。
  17. 大航海时代2阿兰攻略(SFC日版)(续)
  18. 饿了么美团外卖cps返利系统外卖返利公众号搭建cps系统小程序SaaS源码
  19. 以太网口差分电平_逻辑电平之常见差分逻辑电平(4)
  20. [ 网络 ] 应用层协议 —— HTTP协议

热门文章

  1. lora发射和接收原理_四个要点,帮你搞定LoRa天线匹配电路
  2. 【Paper】2017_水下潜航器编队海洋勘测的协调控制方法研究
  3. LaTex 各种特殊符号
  4. 1.3 单一数字评估指标-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  5. RK2908开机时间分析及优化
  6. C++派生类构造函数调用规则
  7. 九个月搞定三轮融资,做 AI 导购的「智能一点」如何在巨头中突围?
  8. 返乡大迁徙,任正非说了两个“不要忘了”
  9. 利用Traefik+Docker构建可弹性扩展的微服务或服务集群
  10. iOS利用通知(NSNotification)进行传值