自定义Dialog和DialogFragment

来源:互联网 发布:百度大数据预测双色球 编辑:程序博客网 时间:2024/05/18 04:37
1.Dialog 系统给的方法基本应用:


http://www.android100.org/html/201302/18/1611.html

2.自定义Dialog,即继承实现任意布局的Dialog

(1)可以采用单例模式

public static final CityPickerDialog getInstance(Context context, String cc, CallBack callback) {    CityPickerDialog dialog = new CityPickerDialog(context, R.style.dialog_style);  //设置Dialog样式    callBack = callback;//设置回调接口    if (!TextUtils.isEmpty(cc)) {        dialog.preId = Integer.valueOf(cc.substring(0, cc.indexOf("")));        dialog.cId = Integer.valueOf(cc.substring(cc.indexOf("") + 1, cc.lastIndexOf("")));       // dialog.couId = Integer.valueOf(cc.substring(cc.lastIndexOf("") + 1));    }    return dialog;}
利用构造方法初始化Dialog样式,例如:
<style parent="@android:style/Theme.Dialog" name="dialog_style">    <item name="android:windowFrame">@null</item>    <item name="android:windowIsFloating">true</item>    <item name="android:windowIsTranslucent">true</item>    <item name="android:windowNoTitle">true</item>    <item name="android:background">@null</item>    <item name="android:backgroundDimAmount">0.3</item><!-- 灰度 -->    <item name="android:windowBackground">@drawable/dialog_bg</item>    <item name="android:backgroundDimEnabled">true</item> <!--   <item name="android:windowFullscreen">true</item>--></style>
回调接口里面可以定义一些Dialog中的事件
同时注意如果需要设置Dialog位置和大小,可以在构造方法中调用initView()方法
里面可以设置窗口的大小距离,对齐方式,出现位置。
Window window = getWindow();window.setWindowAnimations(android.R.style.Animation_InputMethod);WindowManager.LayoutParams wlp = window.getAttributes();WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);// 设置LayoutParams(全局变量)相关参数DisplayMetrics ds = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(ds);wlp.width = ds.widthPixels;wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;wlp.gravity = Gravity.BOTTOM;   wlp.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;window.setAttributes(wlp);
(2)然后再onCreate方法中使用setContentView()就可以设置任意布局了
3自定义DialogFragment
(1)初始化类似于Dialog,即传入回调接口,设
(2)介绍
1、 概述DialogFragment在android 3.0时被引入。是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。 在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。2、 好处与用法使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。且DialogFragment也允许开发者把Dialog作为内嵌的组件进行重用,类似Fragment(可以在大屏幕和小屏幕显示出不同的效果)。上面会通过例子展示这些好处~使用DialogFragment至少需要实现onCreateView或者onCreateDIalog方法。onCreateView即使用定义的xml布局文件展示Dialog。onCreateDialog即利用AlertDialog或者Dialog创建出Dialog。
(3) 其中onCreateDialog可以使用setStyle方法设置样式,如下
@Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.dialog_style);    return super.onCreateDialog(savedInstanceState);}
(4)onCreateView可以填充布局,如下:
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {    mContext = getActivity();    if (rootView != null) {        ViewGroup parent = (ViewGroup) rootView.getParent();        if (parent != null) {            parent.removeView(rootView);        }    } else {        rootView = inflater.inflate(R.layout.dialog_set_or_cancel_top, container, false);        initView(rootView);    }    return rootView;}
同自定义Dialog一样也可以在onCreateView方法中设置对话框大小以及出现位置,例如如下代码:
WindowManager.LayoutParams wmlp = getDialog().getWindow().getAttributes(); wmlp.gravity = Gravity.LEFT;
private void initView(View rootView) {    dialog_choose_list_base_layout = (ListView) rootView.findViewById(R.id.dialog_choose_list_base_layout);    mAdapter = new SetOrCancelTopAdapter(mContext);    mAdapter.setList(options);    dialog_choose_list_base_layout.setAdapter(mAdapter);    dialog_choose_list_base_layout.setOnItemClickListener(this);}
0 0
原创粉丝点击