自定义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样式,例如:
<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方法设置样式,如下
@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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值