DialogFragment使用记录

来源:互联网 发布:mac全屏截图快捷键 编辑:程序博客网 时间:2024/05/21 16:22

官方推荐DialogFragment,今天简单使用了一下,然后结合自己以前项目中遇到的问题,发现还是很好用的,所以决定以后就用DialogFragment了,特此总结。

(关于Dialog转屏过程中会消失而且数据丢失,而DialogFragment可以记录数据的问题不再多说,网上比较多

一.创建

   关于创建有两种方式,都需要继承DialogFragment

     a. 第一种,在onCreateDialog中创建

       这种方式和我们之前的通过alertdialog生成弹窗方式一样,创建一个dialog,直接看代码:

       

public class CreatDialog extends DialogFragment {    @Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());        LayoutInflater layoutInflater = getActivity().getLayoutInflater();        View v = layoutInflater.inflate(R.layout.dialogtext, null);        dialogBuilder.setView(v).setPositiveButton("ok", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                Toast.makeText(getActivity(), "clicked", Toast.LENGTH_SHORT).show();            }        }).setNegativeButton("cancle", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {            }        });                AlertDialog alertDialog = dialogBuilder.create();        return alertDialog;    }}

在mainacitvity的的调用为:

 public void click2(View v){        CreatDialog creatDialog=new CreatDialog();        creatDialog.show(getFragmentManager(),"title");    }

效果图(R.layout.dialogtext2布局是个简单的线性布局,直接拖了一imageview两个textview,不再列出):


      b. 第二种,在onCreateView中创建

public class MyDialog extends DialogFragment {    @Override    public View onCreateView(LayoutInflater inflater,  ViewGroup container,  Bundle savedInstanceState) {        View view=inflater.inflate(R.layout.dialogtext2,container);        return view;    }}
   就是自己定义一个view,直接使用,在mainactivity的调用和上面一样:

 public void click(View v){        MyDialog myDialog=new MyDialog();        myDialog.show(getFragmentManager(),"title");    }
效果图如下:



可以看到有空白title,在onCreateView调用去掉:getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);


二.常用设置

1.背景图片

我以前的一家公司喜欢用一些圆角卡通一些的点9图片做背景,这里也好设置:

首先去掉弹窗自己的背景,在onCreateView调用:

                   getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
然后在我们自己的布局R.layout.xxx中将背景设为我们的图片:android:background="@mipmap/bg"即可
效果图(好丑,哈哈,主要知道去掉弹窗背景的方式就行了)
2.大小
  a.在onCreate设置个主题,比如下面的,可以是宽度占慢这个屏幕
    setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog_MinWidth);
  b.获取屏幕值,去设置大小
    
 @Override    public void onStart() {        super.onStart();        Dialog dialog = getDialog();        if (dialog != null) {            DisplayMetrics dm = new DisplayMetrics();            getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);            dialog.getWindow().setLayout((int) (dm.widthPixels * 0.7), ViewGroup.LayoutParams.WRAP_CONTENT);        }    }
效果图分别如下:
3.弹窗位置
和上面大小b方式相似,调用window.setGravity()
dialog.getWindow()..setGravity(Gravity.BOTTOM);

效果图:



4.添加动画
给window指定一个windowAnimations
  dialog.getWindow().getAttributes().windowAnimations = R.style.dialogAnim;
dialogAnim是定义的弹窗style
    <style name="dialogAnim" mce_bogus="1" parent="android:Animation">        <item name="android:windowEnterAnimation">@anim/dialog_push_in</item>        <item name="android:windowExitAnimation">@anim/dialog_push_out</item>    </style>

效果图不再展示,就是一个从下往上进入的效果。


以上是我之前做项目中常遇到的一些用法,对于普通的弹窗来说应该已经足够了。针对一些list等特殊弹窗,等用到后再总结.....

0 0
原创粉丝点击