【android学习】Dialog对话框

article/2025/9/26 11:59:32

1,Dialog

1)onCreateDialog(int)

2)showDialog(int)

第一次请求时,会从Activity中调用onCreateDialog。

3)onPrepareDialog(int,Dialog)

在每次打开对话框时被调用。

4)dismissDialog(int)

关闭对话框时,可以调用dismiss()。
在Activity中调用dismissDialog,会为这个对话框调用dismiss方法。

如果想使用onCreateDialog方法来管理对话框的状态,然后还在每次对话框消除的时候,这个对话框对象的状态将由该Activity保留。

5)removeDialog(intid)

调用该方法,将删除任何内部对象引用。如果这个对话框正在显示,也会删除。

6)常见对话框

private Dialog dialog;
public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);//创建一个默认对话框dialog = new Dialog(this);//添加xml对象到Dialog对象中dialog.setContentView(R.layout.dialog1);//设置标题dialog.setTitle("Dialog");//显示对话框dialog.show();
}

7)是否允许取消

①对于Dialog dialog

dialog.setCancelable(false);
//dialog弹出后会点击屏幕或物理返回键,dialog不消失

②extends Dialog的类

setCanceledOnTouchOutside(isCancelable);//false为不消失

9)style

    <style name="MyDialog" parent="android:style/Theme.Dialog">  <!--背景颜色及和透明程度-->  <item name="android:windowBackground">@android:color/transparent</item>  <!--是否去除标题 -->  <item name="android:windowNoTitle">true</item>  <!--是否 全屏--><item name="android:windowFullscreen">true</item><!--是否去除边框-->  <item name="android:windowFrame">@null</item>  <!--是否浮现在activity之上-->  <item name="android:windowIsFloating">true</item>  <!--是否模糊-->  <item name="android:backgroundDimEnabled">false</item>  </style>  

10)对话框置顶

        WindowManager.LayoutParams layoutParams= new WindowManager.LayoutParams();layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;layoutParams.gravity = Gravity.TOP|Gravity.RIGHT;getWindow().setAttributes(layoutParams);

2,AlterDialog

1)Builder

AlterDialog通过AlterDialog的Builder进行创建,不能直接用new关键字构建对象。

因为其构造器都是保护的,所以不允许非子类调用。

AlertDialog.Builder builder = new AlertDialog.Builder(this);

2)setPositiveButton

setPositiveButton方法用来加确定按钮。

builder.setPositiveButton("确定"new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){}
});

3)setNegativeButton

setNegativeButton方法用来加取消按钮。

4)show

用于创建并显示对话框。builder.show();
show()源码:

public AlertDialog show() {AlertDialog dialog = create();dialog.show();return dialog;}

create()方法可以创建对话框,但不显示。

5)setTitle

给AlterDialog设置标题。

builder.setTitle("标题");

6)setMessage

给AlterDialog设置内容。

builder.setMessage("内容");

7)setCancelable()

在这儿设置的时false,表示弹出的AlterDialog在用户点击返回键时不消失,该值默认是true。

8)setIcon

预设图片。

builder.setIcon(android.R.drawable.ic);

9)setView

添加自定义控件

LayoutInflater lif = LayoutInflater.from(this);
View editView = lif.inflate(R.layout.dialog3, null);
builder.setView(editView);

10)setSingleChoiceItems

单选对话框。

builder.setSingleChoiceItems(new String[]{"Item1","Item2","Item3"},0,new DialogInterface.OnClickListener(){public void onClick(DialogInterface dialog, int which){dialog.dismiss();}
});

11)setMultiChoiceItems

多选对话框。

builder.setMultiChoiceItems(new String[] {"Item1","Item2"},null,null);

12)setItems

列表对话框。

builder.setItems(new String[] {"Item1","Item2"},null);

3,ProgressDialog

1)概念

进度对话框,会有一个循环的进度条显示在对话框上。

2)demo

ProgressDialog dialog = new ProgressDialog(this);
dialog.setTitle("标题");
dialog.setMessage("请稍后");
dialog.show();

4,实现Dialog类型无标题栏和ActionBar的Activity

方案一:
myAcitivity可以继承AppCompatActivity,然后设置主题:android:theme="@style/AppTheme.Dialog"

<style name="AppTheme.Dialog" parent="Theme.AppCompat.Light.Dialog">    <item name="windowNoTitle">true</item>    
</style>   

方案二:

android:theme="@style/dialog"

myAcitivity继承Acitivity(如果继承AppCompatActivity会出错)

5,继承Dialog

1)demo-AskDialog

i>AskDialog.java

/*** Created by luo on 2018/1/5.*/
public class AskDialog extends BasalDialog implements View.OnClickListener {private OnCancelListener cancelListener;private  boolean cancelable;@BindView(R.id.tv_dialog_ask_query)TextView tv_query;//确定按钮@BindView(R.id.tv_dialog_ask_cancel)TextView tv_cancel;//取消按钮@BindView(R.id.tv_dialog_ask_question)TextView tv_question;//问题private String questionStr;private String cancelStr;public AskDialog setQuestionStr(String questionStr) {this.questionStr = questionStr;return this;}public AskDialog setCancelStr(String cancelStr) {this.cancelStr = cancelStr;return this;}public AskDialog setQueryStr(String queryStr) {this.queryStr = queryStr;return this;}private String queryStr;public AskDialog(@NonNull Context context) {super(context);}public AskDialog(@NonNull Context context, int theme) {super(context,theme);}public AskDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {super(context, cancelable, cancelListener);this.cancelable = cancelable;this.cancelListener = cancelListener;}public AskDialog setOnDialogClickListener(OnDialogClickListener onDialogClickListener) {this.onDialogClickListener = onDialogClickListener;return this;}private OnDialogClickListener onDialogClickListener = null;@Overrideprotected int getLayoutId() {return R.layout.dialog_ask;}@Overrideprotected void loadData() {}@Overrideprotected void viewOption() {tv_question.setText(questionStr);tv_query.setText(queryStr);tv_cancel.setText(cancelStr);}@OnClick({R.id.tv_dialog_ask_cancel, R.id.tv_dialog_ask_query})@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.tv_dialog_ask_cancel:if (null != onDialogClickListener){onDialogClickListener.onCancelClick();}break;case R.id.tv_dialog_ask_query:if (null != onDialogClickListener){onDialogClickListener.onQueryClick();}break;}}
}

ii>dialog_ask.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#20000000"android:gravity="center"><RelativeLayout
        android:layout_width="315dp"android:layout_height="105dp"android:background="@drawable/btn_white"android:paddingLeft="25dp"android:paddingTop="20dp"android:paddingBottom="20dp"><TextView
            android:id="@+id/tv_dialog_ask_question"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:textColor="@color/black"android:text="要清空全部足迹吗?"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"/><TextView
            android:id="@+id/tv_dialog_ask_cancel"android:layout_width="75dp"android:layout_height="24dp"android:gravity="center"android:textSize="13sp"android:textColor="@color/red"android:text="取消"android:layout_alignParentBottom="true"android:layout_toLeftOf="@+id/tv_dialog_ask_query"/><TextView
            android:id="@+id/tv_dialog_ask_query"android:layout_width="75dp"android:layout_height="24dp"android:gravity="center"android:textSize="13sp"android:textColor="@color/red"android:text="确定"android:layout_alignParentRight="true"android:layout_alignParentBottom="true"/></RelativeLayout>
</LinearLayout>

iii>BasalDialog.java

package com.dm.smyx.basal;import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.LinearLayout;import butterknife.BindView;
import butterknife.ButterKnife;/*** Created by luo on 2018/1/5.*/public abstract class BasalDialog extends Dialog {private Context mContext;public BasalDialog(@NonNull Context context) {super(context);mContext = context;}public BasalDialog(@NonNull Context context, int themeResId) {super(context, themeResId);}protected BasalDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {super(context, cancelable, cancelListener);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(getLayoutId());getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);//设置window背景,默认的背景会有Padding值,不能全屏。当然不一定要是透明,你可以设置其他背景,替换默认的背景即可。getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));ButterKnife.bind(this);//按空白处不能取消动画setCanceledOnTouchOutside(false);//初始化界面数据loadData();//初始化界面控件的事件viewOption();}/*** 获取布局资源** @return*/protected abstract int getLayoutId();/*** 加载数据*/protected abstract void loadData();/*** 为控件绑定事件*/protected abstract void viewOption();
}

2)Dialog的全屏显示

①在setContentView()下写:

        //设置window背景,默认的背景会有Padding值,不能全屏。当然不一定要是透明,你可以设置其他背景,替换默认的背景即可。getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

注意:setLayout的高度参数设置为ViewGroup.LayoutParams.WRAP_CONTENT更好一点,否则会出现dialog把状态栏顶上去的情况。
②设置style:

    <style name="DialogFullscreenStyle" parent="@android:style/Theme.Dialog"><item name="android:windowFullscreen">true</item><item name="android:windowNoTitle">true</item></style>

6,自定义Builder弹出对话框

1)含有标题、一个View、一个按钮的对话框

/** * 含有标题、一个View、一个按钮的对话框 * @param title * @param view * @param positiveText * @param onPositiveClickListener * @param cancelable * @return */  public AlertDialog showET_Dialog(String title, View view,  String positiveText,  DialogInterface.OnClickListener onPositiveClickListener,Boolean cancelable) {  AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(title)  .setView(view)  .setPositiveButton(positiveText, onPositiveClickListener)  .setCancelable(cancelable)//设置为false,按返回键不能退出。默认为true  .show();  return alertDialog;  }  

调用的时候这样用:

LayoutInflater inflater =  LayoutInflater.from(mContext);  View view = inflater.inflate(R.layout.fragment_task_builder_et, null);  final ClearEditText et = (ClearEditText)view.findViewById(R.id.fra_task_builder_et_NumLoad);  ((MainActivity) getActivity()).showET_Dialog("提示", view, "完成",  new DialogInterface.OnClickListener() {  @Override  public void onClick(DialogInterface dialog, int which) {  }  }, true);  

.xml是这样的:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:gravity="center"  android:orientation="vertical"  android:padding="10dip" >  <TextView  style="@style/tv_standard"  android:textColor="@color/white"  android:gravity="left"  android:text="@string/fra_task_tv_NumLoad"  android:layout_marginBottom="10dip" />  <com.xaut.wx.view.ClearEditText  android:id="@+id/fra_task_builder_et_NumLoad"  style="@style/et_standard"  android:hint="@string/fra_task_et_NumLoad"  android:inputType="number" />  </LinearLayout>  

运行图:
运行图片

7,PopupWindow

1)概念

自定义弹出。笔者认为使用PopupWindow会使类变的更长,可读性、代码美观降低,不推荐使用。建议封装成dialog使用。

2)与AlertDialog区别

AlertDialog不能指定显示位置,只能默认显示在屏幕最中间(可以通过设置WindowManager参数来改变位置)。
PopupWindow是可以指定显示位置的,更加灵活。

3)方法

①构造函数

//方法一:  
public PopupWindow (Context context)  
//方法二:  
public PopupWindow(View contentView)  
//方法三:  
public PopupWindow(View contentView, int width, int height)  
//方法四:  
public PopupWindow(View contentView, int width, int height, boolean focusable)  

②显示函数

//相对某个控件的位置(正左下方),无偏移  
showAsDropDown(View anchor):  
//相对某个控件的位置,有偏移;xoff表示x轴的偏移,正值表示向左,负值表示向右;yoff表示相对y轴的偏移,正值是向下,负值是向上;  
showAsDropDown(View anchor, int xoff, int yoff):  
//相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移  
showAtLocation(View parent, int gravity, int x, int y):  

③其它

public void dismiss()  
//另外几个函数,这里不讲其意义,下篇细讲  
public void setFocusable(boolean focusable)  
public void setTouchable(boolean touchable)  
public void setOutsideTouchable(boolean touchable)  
public void setBackgroundDrawable(Drawable background) 

4)实现

①popWindow的xml文件:popwindow.xml
②java

PopupWindow mPopWindow;
mPopWindow.dismiss();
//设置contentViewView contentView = LayoutInflater.from(getContext()).inflate(R.layout.popwindow, null);mPopWindow = new PopupWindow(contentView,ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);mPopWindow.setContentView(contentView);mPopWindow.setOutsideTouchable(true);//点击屏幕关闭popWindow。注意,此属性如果失效,请检查inflate时窗口的大小是否全屏(全屏则无外部点击一说)mPopWindow.setBackgroundDrawable(new BitmapDrawable());//设置各个控件的点击响应LinearLayout ll_popwindow = (LinearLayout) contentView.findViewById(R.id.ll_popwindow);ll_popwindow.setOnClickListener(this);//显示PopupWindowView rootview = LayoutInflater.from(getContext()).inflate(R.layout.fragment_car, null);mPopWindow.showAsDropDown(tv);//显示位置

http://chatgpt.dhexx.cn/article/YJ6uk0bK.shtml

相关文章

Android Dialog使用详解

对话框是提示用户作出决定或输入额外信息的小窗口&#xff0c;通常不会填充整个屏幕&#xff0c;用于进行一些额外交互 Dialog 类是对话框的基类&#xff0c;但应该避免直接实例化 Dialog&#xff0c;而应使用其子类&#xff0c;比如 AlertDialog 此对话框可显示标题、提示信…

Android 修改AlertDialog原生setPositiveButton的字体颜色背景颜色大小边距位置

看效果图&#xff1a; public void lanyaClick(View v) {//点击确定之后转向登陆框LayoutInflater factory LayoutInflater.from(Beforestart.this);//得到自定义对话框final View DialogView factory.inflate(R.layout.item_alert_dialog, null);//创建对话框android.app.Al…

setPositiveButton和setNegativeButton的区别

setPositiveButton和setNegativeButton的区别和setNeutralButton的区别 三者都是AlertDialog弹出框的按钮&#xff0c;都是封装好的button&#xff0c;只是显示的位置不同&#xff0c;项目中可根据情况选择使用&#xff0c;setNegativeButton一般用于确认&#xff0c;setNegat…

GPS(rinex格式)数据解析详细解读

RINEX格式现如今已成为GPS测量应用中的标准数据格式&#xff0c;目前应用最为广泛、最普遍的是RINEX格式的第2个版本&#xff0c;该版本能够用于包括静态和动态GPS测量在内的不同观测模式数据。在该版本中定义了6种不同类型的数据文件&#xff0c;分别用于存放不同类型的数据&a…

2020/10/23 GPS的数据格式学习

GPS的数据格式学习 一、在使用GPS的通过串口向电脑发送数据的时候&#xff0c;要注意GPS数据线的连接&#xff1b; 1.1 VCC接VCC&#xff1b;&#xff08;VCC表示接电源正极&#xff09; 1.2 GND接GND&#xff1b;&#xff08;GND表示接地或接电源负极&#xff09; 1.3 TX接RX…

GPS数据包格式+数据解析

GPS数据包格式数据解析 一、全球时区的划分&#xff1a; 每个时区跨15经度。以0经线为界向东向西各划出7.5经度&#xff0c;作为0时区。即0时区的经度范围是7.5W——7.5E。从7.5E与7.5W分别向东、向西每15经度划分为一个时区&#xff0c;直到东11区和西11区。东11区最东部的经度…

GPS研究---GPS 数据格式

GPS 数据处理时所采用的观测数据是来自观测的 GPS 接收机。由于接收机的型号很多&#xff0c;厂商设计的数据格式各不相同&#xff0c;国际上为了能统一使用不同接收机的数据&#xff0c; 设计了一种与接收机无关的 RINEX(The Receiver Independent Exchange Format)格式&#…

GPS数据格式的分析

文章目录 前言一、数据格式解析1、GPGGA2、GPRMC3、GPCHC4、Kitti数据集oxts数据 二、驱动1、功能包1.1 解析GPGGA1.2 华测GPCHC 2、ROS相关消息类型2.1 sensor_msgs::NavSatFix2.2 gps_common::GPSFix2.3 sensor_msgs::Imu 3、驱动思路 三、时间1、UTC时间2、时间戳 前言 GPS…

GPS GLONASS数据文件类型解析

GPS & GLONASS数据文件类型解析 一、GPS数据格式 RINEX格式现如今已成为GPS测量应用中的标准数据格式&#xff0c;目前应用最为广泛、最普遍的是RINEX格式的第2个版本&#xff0c;该版本能够用于包括静态和动态GPS测量在内的不同观测模式数据。在该版本中定义了6种不同类…

GPS的数据格式介绍

GPRMC&#xff08;建议使用最小GPS数据格式&#xff09; $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11><CR><LF> 1) 标准定位时间&#xff08;UTC time&#xff09;格式&#xff1a…

Android ExpandableListView

ExpandableListView可以显示一个视图垂直滚动显示两级列表中的条目&#xff0c;这不同于列表视图&#xff08;ListView&#xff09;。ExpandableListView允许有两个层次&#xff1a;一级列表中有二级列表。 比如在手机设置中&#xff0c;对于分类&#xff0c;有很好的效果。手机…

ExpandableListView用法

先上个效果图&#xff1a; 1&#xff0c;我用的fragment import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.dami.student.ui.chatui.adapter.ContactsExpandableListAdapter; import com.dami.student.R; import android.conten…

android expandablelistview简单应用,android ExpandableListView简单例子

android中常常要用到ListView&#xff0c;有时也要用到ExpandableListView&#xff0c;如在手机设置中&#xff0c;对于分类有很好的效果&#xff0c;会用ListView的人一定会用ExpandableListView&#xff0c;因为 ExpandableListView extends ListView的&#xff0c;下面来看个…

android expandablelistview横向,完美实现ExpandableListView二级分栏效果

本文实例为大家分享了ExpandableListView二级分栏效果的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 对ExpandableListView控件进行封装(未自定义)直接上代码&#xff1a; 通用ViewHolder类&#xff0c;仅在setImageResource中添加代码 package com.svp.haoyan.ex…

android expandablelistview横向,expandableListView 总结

实现效果图&#xff1a; expandableListView groupIndicator 图片默认是在左边&#xff0c;而且比较难看&#xff0c;而我要的是实现groupIndicator 在右边自定义图片&#xff0c; 换图片 最简单的就是直接copy 系统 android:drawable/expander_group ?android:attr/expandab…

Android学习之ExpandableListView

什么是ExpandableListView ExpandableListView是扩展的ListView&#xff0c;继承自ListView&#xff1b;ExpandableListView可以实现点击展开列表&#xff0c;再点击收缩回去的效果。 ExpandableListView的使用 首先需要在主布局文件中声明ExpandableListView&#xff1b; …

ExpandableListView详解

文章目录 效果图ExpandableListView的简介与使用去掉ExpandableListView的箭头以及自定义Indicator解决setOnChildClickListener失效问题解决collapseGroup(i)崩溃问题解决group_item.xml中包含CheckBox、EditText等&#xff0c;点击不能展开的问题 1.效果图 2.ExpandableLi…

values_list()

转载&#xff1a;https://www.cnblogs.com/chenchao1990/p/5311531.html?utm_sourcetuicool&utm_mediumreferral

列表(lists)

Lists and the things you can do with them.Includes indexing(索引&#xff09;,slicing &#xff08;切片&#xff09;and mutating&#xff08;变异&#xff09;. 1.Python 中的列表表示有序的值序列。 以下是如何创建它们的示例&#xff1a; primes [2,3,5,7] #我们可以…

Android Preference API 用法--ListPreference(一)

一&#xff0e;ListPreference简介 我们都只知道SharedPreference非常适合于参数设置功能&#xff0c;在此处的preference 也是代表SharedPreference的意思&#xff0c;在SharedPreference中&#xff0c;我们可以迅速的将某些值保存进xml文件中&#xff0c;然后我们可以读取这…