使用DialogFragment可以任意实现以下两个方法:

1、onCreateView

2、onCreateDialog

但是当需要创建一个宽度撑满屏幕或者位于屏幕底部的Dialog时,使用onCreateView无法满足需求,创建的Dialog总是离屏幕边缘或者底部有一点间距;这时必须通过onCreateDialog来实现。

View view = LayoutInflater.from(activity).inflate(R.layout.xxx, null);AlertDialog dialog = new AlertDialog.Builder(activity, R.style.ShareDialogTheme).setView(view).create();

不过在onCreateDialog中,也需要注意:

1、需要给dialog指定一个样式,否则会使用默认的样式,还是无法撑满屏幕。

    

2、使用setView,而不是使用dialog的setContentView,如果使用后者,在父类的onStart里会调用AlertDialog的onCreate,最终会调用requestWindowFeature,就会抛异常“requestWindowFeature必须在setContentView前调用”。

3、在onStart里去改变Dialog的位置和大小,在onCreateDialog里无效。

    @Override    public void onStart() {        super.onStart();        Window window = getDialog().getWindow();        WindowManager.LayoutParams wlp = window.getAttributes();        wlp.gravity = Gravity.BOTTOM;        wlp.width = WindowManager.LayoutParams.MATCH_PARENT;        window.setAttributes(wlp);    }

还有一种方法是直接new一个Dialog:

    @Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        Dialog dialog = new Dialog(getActivity(), R.style.ShareDialogTheme);        dialog.setContentView(R.layout.xxx);        Window window = dialog.getWindow();        WindowManager.LayoutParams wlp = window.getAttributes();        wlp.gravity = Gravity.BOTTOM;        wlp.width = WindowManager.LayoutParams.MATCH_PARENT;        window.setAttributes(wlp);                    return dialog;    }

就可以使用setContentView,因为Dialog的onCreate是一个空实现,在DialogFragment的onStart里调用它的时,不会去调requestWindowFeature,也可以直接在onCreateDialog里去改变大小和位置,也是因为这个原因。不过直接new一个Dialog,谷歌并不推荐。

更多相关文章

  1. Android(安卓)Button setTextColor()参数调用分析
  2. kotlin技巧和细节整理
  3. Android(安卓)AIDL实现两个APP间的跨进程通信实例
  4. Android(安卓)布局单位转换
  5. 设置自定义ProgressBar样式
  6. Android(安卓)ViewRootImpl 解析
  7. 一只不务正业的程序猿玩出个Processing交互库
  8. android Service相关知识点
  9. 在Android(安卓)studio中调用python代码

随机推荐

  1. Web Components 系列(十一)—— 实现 MyCar
  2. 【calculate】Calculate Linux安装步骤操
  3. 测试测试测试
  4. 解决使用SSH命令远程连接Linux服务器加载
  5. PHP接口、抽象类以及一个验证码登录小案
  6. 【Grafana】基于CentOS 7 安装部署Grafan
  7. DOM 节点的克隆和导入
  8. composer常用命令以及使用验证码插件的演
  9. uni常用的事件
  10. 类的自动加载