自定义Dialog和DialogFragment

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样式,例如:
回调接口里面可以定义一些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方法设置样式,如下
 
  
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.dialog_style);
    return super.onCreateDialog(savedInstanceState);
}
(4)onCreateView可以填充布局,如下:
 
  
@Override
public 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);
}
 
 

你可能感兴趣的:(Android)