您当前的位置:首页 > 互联网教程

android studio怎么创建dialogfragment

发布时间:2025-05-13 06:18:29    发布人:远客网络

android studio怎么创建dialogfragment

一、android studio怎么创建dialogfragment

DialogFragment是在Android3.0的时候被引入的,从其名字可以很直观的看出它是一种基于Fragment的Dialog,可以用来创建对话框,它是用来替代Dialog的。一个新事物的出现是为了解决旧事物存在的问题,那不建议使用的Dialog存在什么问题呢?下面简单的说下。

在手机配置发生变化后(比如:旋屏后),变化之前显示的Dialog,变化之后不会显示,更别提Dialog状态的恢复了。

管理自定义的Dialog和系统原生的Dialog麻烦

DialogFragment怎么解决Dialog存在的问题

DialogFragment说到底还是一个Fragment,因此它继承了Fragment的所有特性。同理FragmentManager会管理DialogFragment。在手机配置发生变化的时候,FragmentManager可以负责现场的恢复工作。调用DialogFragment的setArguments(bundle)方法进行数据的设置,可以保证DialogFragment的数据也能恢复。

DialogFragment里的onCreateView和onCreateDIalog 2个方法,onCreateView可以用来创建自定义Dialog,onCreateDIalog可以用Dialog来创建系统原生Dialog。可以在一个类中管理2种不同的dialog。

既然DialogFragment有这些好处,那对项目中的Dialog用DialogFragment来进行替代。

二、DialogFragment和dialog有什么区别

Android对话框编程有两种类型可供使用,一种是Dialog,另一种则是Android 3.0引入的基于Fragment的DialogFragment。

从代码的编写角度看,Dialog使用起来要更为简单,但是Google则是推荐尽量使用DialogFragment(对于Android 3.0以下的版本,可以结合使用support包中提供的DialogFragment以及FragmentActivity)。今天试着用这两种方式来创建对话框,发现DialogFragment果然有一个非常好的特性(在手机配置变化,导致Activity需要重新创建时,例如旋屏,基于DialogFragment的对话框将会由FragmentManager自动重建,然而基于Dialog实现的对话框则没有这样的能力)。

DialogFragment还拥有fragment的优点,即可以在一个Activity内部实现回退(因为FragmentManager会管理一个回退栈)。

三、Android当键盘显示时,DialogFragment不会调整大小怎么解决

在我们的应用中,有时候一进入一个页面,EditText默认就会自动获取焦点。弹出输入法框,用户体验很不好,那么如何取消这个默认行为呢?ps:这篇文字是一年前写的,现在有网友再问这个问题,我进行重新编辑--2014.05.07,目前有更好的法,第一种方法局限性很强,大家可以使用第二种方法第一种方法:.在网上找了好久,有点监听软键盘事件的方法,有调用clearFouse()方法,但是测试了都不行!在对应的xml中也找不到相应的属性可以关闭这个默认行为。后来研究了一下,在其父控件下,添加如下的属性,就可以完美解决:android:focusable="true"android:focusableInTouchMode="true"举例如下:第二种方法:直接关闭输入法?12345678privatevoidcloseInputMethod(){InputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);booleanisOpen=imm.isActive();if(isOpen){//imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);//没有显示则显示imm.hideSoftInputFromWindow(mobile_topup_num.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);}}调用这个方法体就行了,具体if语句里面的几个参数,我就借用一个网友的日志来写把(在此感谢)?12345678910111213141516171819201、方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示)InputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);2、方法二(view为接受软键盘输入的视图,SHOW_FORCED表示强制显示)InputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);[java]viewplaincopyimm.hideSoftInputFromWindow(view.getWindowToken(),0);//强制隐藏键盘3、调用隐藏系统默认的输入法((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity.this.getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);(WidgetSearchActivity是当前的Activity)4、获取输入法打开的状态InputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);booleanisOpen=imm.isActive();//isOpen若返回true,则表示输入法打开好了,祝大家玩的开心