如何在Google日历应用中使用Android对话框(全屏,嵌入式)

时间:2015-12-31 10:41:29

标签: android screen-size dialogfragment

我想要实现的目标

由Google在其日历应用中实现的小/大屏幕行为。

例如,当您创建新事件时,在大屏幕上会打开“对话框”

  1. 使背景中的活动变暗
  2. 工具栏始终位于同一位置,并且永远不会被屏幕键盘推出视图
  3. 在纵向模式下,对话框工具栏的底部与活动的“扩展”工具栏的底部对齐。

    Toolbar alignment w/ Activity Toolbar

    上下文操作栏(例如用于文本选择)是在活动的工具栏上绘制的,并向下推动对话框,因此它不再与活动的工具栏相关联。

  4. 在横向模式下,它似乎固定在通知栏下方;上下文操作栏是在活动的工具栏上绘制的

    Contextual Action Bar: left landscape, right portrait

  5. 在小屏幕上,

    1. 对话框填满了屏幕
    2. 上下文操作栏通过工具栏绘制
    3. 到目前为止我尝试了什么

      一个。从android文档中全屏显示DialogFragment示例(不能再添加缺少声誉的b / c链接)

      • 当显示为全屏对话框时,背景是透明的,它会覆盖通知栏(类似于沉浸式模式)

      B中。添加(感谢stackoverflow上的一些帖子)

      • 对话框片段样式:

        setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialogFragmentStyle);
        
        <style name="MyDialogFragmentStyle" parent="@style/MyTheme">
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowFullscreen">false</item>
            <item name="android:windowIsFloating">false</item>
        </style>
        
      • 删除了窗口标题

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        
      • 添加了自定义工具栏

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        
          <android.support.v7.widget.Toolbar
             android:id="@+id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:background="?attr/colorPrimary"
             android:minHeight="?attr/actionBarSize"
             app:homeAsUpIndicator="@drawable/ic_arrow_back_white_24dp"
             app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
        
          <FrameLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/toolbar" >
          </FrameLayout>
        
        </RelativeLayout>
        
      • 并在小型设备上将对话框设置为全屏

        dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        

      这种方法有效,它解决了我的一些我想要得到的点和A.'Android示例'问题(透明背景,......)

      1. 使背景中的活动变暗

        • 工作原理
      2. 工具栏始终保持在同一位置,并且永远不会被屏幕键盘推出视野

        • 有点,除了通过屏幕键盘将工具栏推出屏幕外
      3. 在纵向模式下,对话框工具栏的底部与活动的“扩展/大”工具栏的底部对齐。 上下文操作栏(例如用于文本选择)是在活动的工具栏上绘制的,并向下推动对话框,因此它不再与活动的工具栏相关联。

        • nope,没有付出任何努力来对齐b / c 2.上下文操作栏是在Activity的工具栏上绘制的,并且是对话框工具栏的一部分。
      4. 在横向模式下,它似乎固定在通知栏下方;上下文操作栏是在活动的工具栏上绘制的。

        • nope,屏幕键盘将工具栏推出屏幕,上下文操作栏被绘制在Activity的工具栏上,但也在部分对话框上(对话框工具栏的b / c被推到外面 - 我猜)< / LI>
      5. 它填满了屏幕

        • 工作原理
      6. 通过对话框的工具栏

        绘制上下文操作栏
        • 上下文操作栏按下对话框的工具栏,为用户留下两个工具栏。看起来很奇怪,但至少它很实用。
      7. 所以,我的第一篇文章有​​点长篇大论 - 感谢所有到目前为止阅读的人。

        我一直在研究这个主题很长一段时间了。有些人说对话片段不适合非全屏显示,并且应该将活动设置为看起来像对话框。其他人说,将活动设计为看起来像对话框b / c这是DialogFragments的用途是不好的做法。关于这个话题似乎没有广泛的一致意见。

        有没有人对Google如何在其日历应用中实现此功能有任何见解? (遗憾的是,在AOSP来源中,只有旧日历应用程序可用)。

        有没有办法用对话框片段满足我的所有要求?

        非常感谢 迈克尔

        btw:使用支持库DialogFragment在Android 4.1平板电脑,小型设备Android 4.1和5.0上进行大型设备测试,但过渡到“正常”DialogFragment。

0 个答案:

没有答案