Android 适应任何自定义样式 提示弹出框 Dialog 封装
Android开发中Dialog对话框的使用

Dialog是android开发过程中最常用到的组件之一,它包括以下几种类型:警告对话框:Alertialog进度对话框:ProgressDialog日期选择对话框:DatePickerDialog时间选择对话框:TimePickerDialog自定义对话框:从Dialog继承Dialog的创建方式有两种:一是直接new一个Dialog对象,然后调用Dialog对象的show和dismiss方法来控制对话框的显示和隐藏。
二是在Activity的onCreateDialog(int id)方法中创建Dialog对象并返回,然后调用Activty的showDialog(int id)和dismissDialog(int id)来显示和隐藏对话框。
区别在于通过第二种方式创建的对话框会继承Activity的属性,比如获得Activity的menu事件等。
使用AlertDialog可以创建普通对话框、带列表的对话框以及带单选按钮和多选按钮的对话框。
普通对话框效果如下:代码://创建builderAlertDialog.Builder builder = newAlertDialog.Builder(DialogSampleActivity.this);builder.setTitle("普通对话框") //标题.setIcon(R.drawable.ic_launcher) //icon.setCancelable(false) //不响应back按钮.setMessage("这是一个普通对话框") //对话框显示内容//设置按钮.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(DialogSampleActivity.this, "点击了确定按钮", Toast.LENGTH_SHORT).show();}).setNeutralButton("中立", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(DialogSampleActivity.this, "点击了中立按钮", Toast.LENGTH_SHORT).show();}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(DialogSampleActivity.this, "点击了取消按钮", Toast.LENGTH_SHORT).show();});//创建Dialog对象AlertDialog dlg = builder.create();return dlg;带列表的对话框效果图:代码:final CharSequence[] items = { "Item1", "Item2", "Item3" };// 创建builderAlertDialog.Builder builder = new AlertDialog.Builder(DialogSampleActivity.this);builder.setTitle("列表对话框") // 标题.setIcon(R.drawable.ic_launcher) // icon.setCancelable(false) // 不响应back按钮.setItems(items, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(DialogSampleActivity.this,"选择了" + items[which], Toast.LENGTH_SHORT).show();});// 创建Dialog对象AlertDialog dlg = builder.create();return dlg;带单选按钮的列表对话框只需将setItems替换为:.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(DialogSampleActivity.this,"选择了" + items[which], Toast.LENGTH_SHORT).show();});这里多了一个参数-1,代表默认选中第几项,-1表示默认不选中带复选框的列表对话框只需将setItems替换为:.setMultiChoiceItems(items, checked, newDialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {Toast.makeText(DialogSampleActivity.this,"选择了" + items[which], Toast.LENGTH_SHORT).show();});参数checked伟boolean数组,表示默认哪些复选框是被选中的。
Android对话框(Dialog)大全建立你自己的对话框.

Android 对话框(Dialog大全建立你自己的对话框Activities提供了一种方便管理的创建、保存、回复的对话框机制,例如onCreateDialog(int, onPrepareDialog(int, Dialog, showDialog(int,dismissDialog(int等方法,如果使用这些方法的话,Activity将通过getOwnerActivity(方法返回该Activity管理的对话框(dialog.onCreateDialog(int:当你使用这个回调函数时,Android系统会有效的设置这个Activity为每个对话框的所有者,从而自动管理每个对话框的状态并挂靠到Activity上。
这样,每个对话框继承这个Activity的特定属性。
比如,当一个对话框打开时,菜单键显示为这个Activity定义的选项菜单,音量键修改Activity使用的音频流。
showDialog(int: 当你想要显示一个对话框时,调用showDialog(int id 方法并传递一个唯一标识这个对话框的整数。
当对话框第一次被请求时,Android 从你的Activity中调用onCreateDialog(int id,你应该在这里初始化这个对话框Dialog。
这个回调方法被传以和showDialog(int id相同的ID。
当你创建这个对话框后,在Activity的最后返回这个对象。
onPrepareDialog(int, Dialog:在对话框被显示之前,Android还调用了可选的回调函数onPrepareDialog(int id, Dialog. 如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。
这个方法在每次打开对话框时被调用,而onCreateDialog(int 仅在对话框第一次打开时被调用。
如果你不定义onPrepareDialog(,那么这个对话框将保持和上次打开时一样。
Android常用的五种弹出对话框-电脑资料

Android常用的五种弹出对话框-电脑资料一个Android开发中常用对话框的小例子,共有五种对话框:普通弹出对话框,单选对话框,多选对话框,输入对话框及进度条样式对话框:xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" >android:id="@+id/common_dialog"android:layout_width="match_parent"android:layout_height="40dp"android:text="普通对话框"android:textSize="16sp"android:layout_marginTop="10dp" />android:id="@+id/radio_dialog"android:layout_width="match_parent"android:layout_height="40dp"android:text="单选对话框"android:textSize="16sp"android:layout_marginTop="10dp" />android:id="@+id/check_dialog"android:layout_width="match_parent"android:layout_height="40dp"android:text="多选对话框"android:textSize="16sp"android:layout_marginTop="10dp" />android:id="@+id/input_dialog"android:layout_width="match_parent"android:layout_height="40dp"android:text="输入文字对话框"android:textSize="16sp"android:layout_marginTop="10dp" /> android:id="@+id/progress_dialog"android:layout_width="match_parent" android:layout_height="40dp"android:text="进度条对话框"android:textSize="16sp"android:layout_marginTop="10dp" />下面是输入内容的简单布局activity_input.xmlxmlns:tools="/tools" android:id="@+id/LinearLayout1"android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" ><textview< p=""></textview<>android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /><edittext< p=""></edittext<>android:id="@+id/uname"android:layout_width="fill_parent"android:layout_height="wrap_content" /><textview< p=""></textview<>android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><edittext< p=""></edittext<>android:id="@+id/upass"android:layout_width="fill_parent"android:layout_height="wrap_content" />代码及注释:public class MainActivity extends Activity implements OnClickListener {/**单选框模拟标题大学*/private final static int CHECKED_ENU = 0;/**单选框模拟标题高中*/private final static int CHECKED_SEL = 1;/**单选框模拟标题初中*/private final static int CHECKED_CHU = 2;/**复选按钮状态为全选 */private boolean[] checked = { true, true, true, false };/**模拟的进度值 */private int progressNumber;/**进度对话框 */private ProgressDialog progressDialog;/**对应按钮*/private Button commonBtn, radioBtn, checkBtn, inputBtn, progressBtn;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);initViews();initListeners();}/**初始化UI控件*/private void initViews() {monBtn = (Button) findViewById(mon_dialog);this.radioBtn = (Button) findViewById(R.id.radio_dialog);this.checkBtn = (Button) findViewById(R.id.check_dialog);this.inputBtn = (Button) findViewById(R.id.input_dialog);this.progressBtn = (Button) findViewById(R.id.progress_dialog);}/**注册按钮监听事件*/private void initListeners() {monBtn.setOnClickListener(this);this.radioBtn.setOnClickListener(this);this.checkBtn.setOnClickListener(this);this.inputBtn.setOnClickListener(this);this.progressBtn.setOnClickListener(this);}/**普通对话框 */private Dialog buildAlertDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable.ic_launcher);builder.setTitle("对话框");builder.setMessage("您的密码不对!!");ImageView imageView = new ImageView(this);imageView.setImageResource(R.drawable.mm1);/**设置背景图片*/builder.setView(imageView);/**左边按钮*/builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {setTitle("您点击的是左边确定按钮!");}});/**中间按钮*/builder.setNeutralButton("详情", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {setTitle("您点击的是中间详情按钮!");}});/**右边按钮*/builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubsetTitle("您点击的是右边取消按钮!");}return builder.create();}/**单选按钮弹出框 */private Dialog buildAlertDialog_radio() {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable.ic_launcher);builder.setTitle("对话框");/**单选按钮,默认高中被选中*/builder.setSingleChoiceItems(new String[] { "大学", "高中", "初中", "小学" }, 1, new DialogInterface.OnClickListener() { @Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubswitch (which) {case CHECKED_ENU:setTitle("大学");break;case CHECKED_SEL:setTitle("高中");break;case CHECKED_CHU:setTitle("初中");break;default:setTitle("小学");break;}}builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {setTitle("您点击的是左边确定按钮!");}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {setTitle("您点击的是右边取消按钮!");}});return builder.create();}/**可以多选按钮弹出框 */private Dialog buildAlertDialog_checkbox() {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable.ic_launcher);builder.setTitle("对话框");/**复选按钮*/builder.setMultiChoiceItems(new String[] { "大学", "高中", "初中", "小学" }, checked, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {setTitle("which=" + which + "-----" + "isChecked=" + isChecked);}});builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {setTitle("您点击了确定按钮!");}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubsetTitle("您点击的是了取消按钮!");}});return builder.create();}/**含可以输入文本的弹出框 */private Dialog buildAlertDialog_input() {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable.ic_launcher);builder.setTitle("对话框");LayoutInflater inflater = LayoutInflater.from(this);builder.setView(inflater.inflate(yout.activity_input, null));builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {setTitle("您点击的是确定按钮!");}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {setTitle("您点击的是取消按钮!");}});return builder.create();}/**进度对话框 */private Dialog buildAlertDialog_progress() {progressDialog = new ProgressDialog(this);progressDialog.setTitle("进度条");progressDialog.setMessage("正在下载...........");/**进度条样式 */progressDialog.setProgressStyle(ProgressDialog.STYLE_ HORIZONTAL);/**模糊效果 */progressDialog.setIndeterminate(false);return progressDialog;}/**每隔0.3秒更新一次进度 */public void updateProgress() {new Thread() {@Overridepublic void run() {try {while (progressNumber <= 100) { progressDialog.setProgress(progressNumber++); Thread.sleep(300);super.run();}/**下载完后,关闭下载框 */progressDialog.cancel();} catch (InterruptedException e) {e.printStackTrace();}}}.start();}@Overridepublic void onClick(View v) {switch (v.getId()) {case mon_dialog:buildAlertDialog().show();break;case R.id.radio_dialog:buildAlertDialog_radio().show();break;case R.id.check_dialog:buildAlertDialog_checkbox().show();break;case R.id.input_dialog:buildAlertDialog_input().show(); break;case R.id.progress_dialog: buildAlertDialog_progress().show(); updateProgress();break;default:break;}}}。
Android多种简单的弹出框样式设置代码

Android多种简单的弹出框样式设置代码简介这是⼀个基于AlertDialog和Dialog这两个类封装的多种弹出框样式,其中提供各种简单样式的弹出框使⽤说明。
同时也可⾃定义弹出框。
特性1.使⽤链式开发代码简洁明了2.所有的弹出框样式都在DialogUIUtils这个类中完成,⽅便查阅⽅法3.可以⾃定义弹出框字体样式4.简单的类似加载框的样式可以⽀持两种主题更改默认⽩⾊和灰⾊截图demo下载demo apk下载Download or grab via Maven:<dependency><groupId>com.dou361.dialogui</groupId> <artifactId>jjdxm-dialogui</artifactId><version>x.x.x</version>or Gradle:compile 'com.dou361.dialogui:jjdxm-dialogui:x.x.x'历史版本:compile 'com.dou361.dialogui:jjdxm-dialogui:1.0.1'compile 'com.dou361.dialogui:jjdxm-dialogui:1.0.0'jjdxm-dialogui requires at minimum Java 9 or Android 2.3.架包的打包引⽤以及冲突解决代码混淆根据你的混淆器配置和使⽤,您可能需要在你的proguard⽂件内配置以下内容:-keep class com.dou361.** {*;}AndroidStudio代码混淆注意的问题快速开始step1如果需要使⽤toast类,采⽤单例模式的,多次调⽤toast后只会显⽰⼀个,需要初始化DialogUIUtils类,否则会抛异常,使⽤前初始化即可,代码如下DialogUIUtils.init(appContext);step2如果不需要使⽤toast类,可以不操作step1,直接使⽤相对于的弹出框即可。
Android开发自定义Dialog(BottomSheetDialog与Dialog)开发记录

Android开发⾃定义Dialog(BottomSheetDialog与Dialog)开发记录前⾔ 记录⼀些⾃⼰项⽬上⾃定义的Dialog基础Dialogpublic class BaseDialog extends Dialog {private float widthRatio = 1f;private ShapeDrawable mShapeDrawable;public BaseDialog(@NonNull Context context) {super(context);}public BaseDialog(@NonNull Context context, int themeResId) {super(context, themeResId);}protected BaseDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {super(context, cancelable, cancelListener);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}/*** 设置对话框宽度与屏幕宽度占⽐ 0.0~1.0** @param widthRatio*/public void setWidthRatio(float widthRatio) {this.widthRatio = widthRatio;}@Overrideprotected void onStart() {super.onStart();youtParams layoutParams = getWindow().getAttributes();float width = getContext().getResources().getDisplayMetrics().widthPixels * widthRatio;layoutParams.width = (int) width;getWindow().setAttributes(layoutParams);getWindow().getDecorView().setBackground(new ColorDrawable(Color.TRANSPARENT));}}实现对话框全透明在styles添加<style name="dialogTransparent" parent="@android:style/Theme.Dialog"><item name="android:windowFrame">@null</item><!--边框--><item name="android:windowIsFloating">true</item><!--是否浮现在activity之上--><item name="android:windowIsTranslucent">true</item><!--半透明--><item name="android:windowNoTitle">true</item><!--⽆标题--><item name="android:background">@android:color/transparent</item><!--背景透明--><item name="android:windowBackground">@android:color/transparent</item><!--背景透明--><item name="android:backgroundDimEnabled">true</item><!--模糊--><item name="android:backgroundDimAmount">0.5</item><!--背景透明度0到1 50%就是0.5--></style>将风格添加public class NumberInputDialog extends BottomSheetDialog implements View.OnClickListener {public NumberInputDialog(@NonNull Context context) {super(context,R.style.dialogTransparent);initView();}设置背景透明@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().getDecorView().setBackground(new ColorDrawable(Color.TRANSPARENT));}设置全屏请注意,在开发的时候经常会发现,我们设置的全屏的宽度或者全屏的⾼度后经常外⾯还要⼀些边缘空⽩空间,需要设置setPadding来取消空⽩内边距,代码如下:@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().getDecorView().setPadding(0,0,0,0);//取消内边距空⽩getWindow().setLayout(youtParams.MATCH_PARENT, youtParams.MATCH_PARENT);//设置全屏}或者@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().getDecorView().setPadding(0,0,0,0);//取消内边距空⽩youtParams layoutParams = getWindow().getAttributes();layoutParams.width = youtParams.MATCH_PARENT;layoutParams.height = youtParams.MATCH_PARENT;getWindow().setAttributes(layoutParams);}在取消内边距空⽩后,还有⼀个好处,那就是设置 layoutParams.width 与layoutParams.height 会更加准确设置对话框显⽰位置@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设置显⽰位置 Gravity.BOTTOM Gravity.TOP Gravity.LEFT Gravity.RIGHT Gravity.CENTERgetWindow().setGravity(Gravity.BOTTOM);}弹出输⼊法并且焦点选中输⼊框EditText editTextTextPersonName = findViewById(R.id.editTextTextPersonName);getWindow().setSoftInputMode(youtParams.SOFT_INPUT_STATE_VISIBLE);//设置输⼊盘可见editTextTextPersonName.requestFocus();设置背景阴影透明度@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);youtParams layoutParams = getWindow().getAttributes();layoutParams.dimAmount = 0f;//调整透明度getWindow().setAttributes(layoutParams);}BottomSheetDialog禁⽤下滑退出private fun showDurationPickerDialog(){val dialog = context?.let { BottomSheetDialog(it) }val binding = DialogDurationPickerBinding.inflate(layoutInflater)dialog?.setContentView(binding.root)binding.root.post {val view = dialog?.findViewById<View>(R.id.design_bottom_sheet)val behavior = view?.let { BottomSheetBehavior.from(it) }behavior?.isHideable = false//略...BottomSheetDialog背景透明(显⽰圆⾓) BottomSheetDialog对话框其实是⾃带⼀个⽩⾊背景的,我们在⾃⼰的布局设置圆⾓shape后会出现不显⽰的情况. val dialog = BottomSheetDialog(this)dialog.setContentView(yout.main_dialog_bottom_wheel)dialog.show()//设置背景透明,需要在show⽅法后⾯dialog.findViewById<View>(R.id.design_bottom_sheet)?.setBackgroundResource(android.R.color.transparent)横屏显⽰不全的问题解决@Overrideprotected void onStart() {super.onStart();if (mIsHorizontal){getBehavior().setState(BottomSheetBehavior.STATE_EXPANDED);}}end。
Android自定义弹出窗口PopupWindow使用技巧

Android⾃定义弹出窗⼝PopupWindow使⽤技巧PopupWindow是Android上⾃定义弹出窗⼝,使⽤起来很⽅便。
PopupWindow的构造函数为复制代码代码如下:public PopupWindow(View contentView, int width, int height, boolean focusable)contentView为要显⽰的view,width和height为宽和⾼,值为像素值,也可以是MATCHT_PARENT和WRAP_CONTENT。
focusable为是否可以获得焦点,这是⼀个很重要的参数,也可以通过public void setFocusable(boolean focusable)来设置,如果focusable为false,在⼀个Activity弹出⼀个PopupWindow,按返回键,由于PopupWindow没有焦点,会直接退出Activity。
如果focusable为true,PopupWindow弹出后,所有的触屏和物理按键都有PopupWindows处理。
如果PopupWindow中有Editor的话,focusable要为true。
下⾯实现⼀个简单的PopupWindow主界⾯的layout为:<RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/layout_main"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/btn_test_popupwindow"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="@string/app_name" /></RelativeLayout>PopupWindow的layout为:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="#000000" ><TextViewandroid:layout_width="wrap_content"android:layout_height="80dp"android:text="@string/app_name"android:textColor="#ffffffff"android:layout_centerInParent="true"android:gravity="center"/></RelativeLayout>Activity的代码为:public class MainActivity extends Activity {private Button mButton;private PopupWindow mPopupWindow;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);View popupView = getLayoutInflater().inflate(yout_popupwindow, null);mPopupWindow = new PopupWindow(popupView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);mPopupWindow.setTouchable(true);mPopupWindow.setOutsideTouchable(true);mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));mButton = (Button) findViewById(R.id.btn_test_popupwindow);mButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mPopupWindow.showAsDropDown(v);}});}}这三⾏代码mPopupWindow.setTouchable(true);mPopupWindow.setOutsideTouchable(true);mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));的作⽤是点击空⽩处的时候PopupWindow会消失。
android弹出窗口的实现(PopupWindow)

接下来定义弹出对话框的布局文件group_list.xml和group_item_view.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/group_bg" android:orientation="vertical" > <ImageView android:id="@+id/iv_group_list_bg_divider" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/group_divider" /> <ListView android:id="@+id/lvGroup" android:layout_width="fill_parent" android:layout_height="fill_parent" android:divider="@drawable/group_divider" /></LinearLayout>
android dialogfragment简书

android dialogfragment简书【实用版】目录1.Android DialogFragment 简介2.DialogFragment 与 Fragment 的区别3.DialogFragment 的创建与使用4.DialogFragment 的优点与局限性5.简书对于 DialogFragment 的使用案例正文1.Android DialogFragment 简介DialogFragment 是 Android 系统中一种特殊的 Fragment,用于实现对话框(Dialog)的功能。
与普通的 Fragment 不同,DialogFragment 可以在用户界面中独立显示,不依赖于 Activity 的生命周期。
DialogFragment 通常用于实现对用户友好的提示、警告、确认等操作。
2.DialogFragment 与 Fragment 的区别DialogFragment 与普通 Fragment 在功能和用途上有明显的区别。
普通 Fragment 是 Activity 中的一个组成部分,可以与 Activity 共享生命周期,而 DialogFragment 则相对独立,可以独立显示和消失。
DialogFragment 主要用于实现对话框功能,而普通 Fragment 则用于构建应用的基本界面。
3.DialogFragment 的创建与使用要创建一个 DialogFragment,首先需要继承android.app.DialogFragment 类,并重写其 onCreateDialog 方法。
在onCreateDialog 方法中,可以通过 Inflater 实例创建一个对话框布局(Layout),并设置对话框的标题、内容和按钮等属性。
最后,调用setContentView 方法将布局设置为 DialogFragment 的内容视图。
使用 DialogFragment 时,通常需要通过 FragmentManager 来将其添加到 Activity 中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android 适应任何样式提示弹出框Dialog 封装
在Android开发中,难免有各种各样的提示框,如加载数据等待框,删除确认框、输入密码提示框等等,这些是完全可以自定义的,这里给出一个框架以及一个示例,帮助你开发任何样式布局的提示框,废话不多说,直接贴代码:
HintDialog.java
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.view.KeyEvent;
import android.view.Window;
public class HintDialog
{
Dialog mDialog = null;
private Context mContext = null;
private IHintDialog mIDialogInstance = null;
/**
* 构造函数
* @param context
*/
public HintDialog(Context context)
{
mContext = context;
mDialog = new AlertDialog(mContext)
{
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK &&
mIDialogInstance != null)
{
mIDialogInstance.onKeyDown(keyCode, event);
return true;
}
return super.onKeyDown(keyCode, event);
}
};
mDialog.setCancelable(false);
mDialog.setCanceledOnTouchOutside(false);
}
/**
*
* @param iLayoutResId 此DIALOG采用的布局文件
* @param interfaceInstance 此DIALOG需要实现的一些接口事件 */
public void showDialog(int iLayoutResId, IHintDialog interfaceInstance)
{
if (mDialog == null || iLayoutResId == 0)
{
return;
}
mIDialogInstance = interfaceInstance;
mDialog.show();
mDialog.setContentView(iLayoutResId);
Window window = mDialog.getWindow();
if (mIDialogInstance != null)
{
mIDialogInstance.showWindowDetail(window);
}
}
/**
* 使dialog消失
*/
public void dismissDialog()
{
if (mDialog != null && mDialog.isShowing())
{
mDialog.dismiss();
}
}
/**
* 确定Dialog是否正在显示
* @return
public boolean isShowing()
{
if (mDialog != null && mDialog.isShowing())
{
return mDialog.isShowing();
}
return false;
}
public interface IHintDialog
{
public void onKeyDown(int keyCode, KeyEvent event);
public void showWindowDetail(Window window);
}
}
HintDialogActivity.java
import com.example.hintdialogdemo.HintDialog.IHintDialog;
import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class HintDialogActivity extends Activity implements OnClickListener
{
Button btnConfirm = null;
HintDialog mDialog = null;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(yout.activity_hint_dialog);
btnConfirm = (Button) findViewById(R.id.button1);
btnConfirm.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_hint_dialog, menu);
return true;
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.button1:
mDialog = new HintDialog(
HintDialogActivity.this);
mDialog.showDialog(yout.confirm_dialog, new IHintDialog()
{
@Override
public void showWindowDetail(Window window)
{
TextView txvTitle = (TextView) window
.findViewById(R.id.txvTitle);
txvTitle.setText("Confirm?");
Button btnOK = (Button)
window.findViewById(R.id.btnOK);
btnOK.setText("Yes");
btnOK.setOnClickListener(HintDialogActivity.this);
Button btnCancel = (Button) window
.findViewById(R.id.btnCancel);
btnCancel.setText("NO");
btnCancel.setOnClickListener(HintDialogActivity.this);
}
@Override
public void onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
mDialog.dismissDialog();
Toast.makeText(HintDialogActivity.this,
"onKeyback now",
Toast.LENGTH_LONG).show();
}
}
});
break;
case R.id.btnOK:
mDialog.dismissDialog();
Toast.makeText(HintDialogActivity.this,
"Confirm OK now", Toast.LENGTH_LONG).show();
break;
case R.id.btnCancel:
mDialog.dismissDialog();
Toast.makeText(HintDialogActivity.this,
"Confirm Cancel now", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
其实也不难,主要是AlertDialog的使用,注意需要显示调用dissmissDialog()来消失此弹出框。