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

我想要达到什么目的

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

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

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

    工具栏alignmentW /活动工具栏

    上下文操作栏(例如,用于文本select)被绘制在活动的工具栏上,并且向下推动对话框,所以它不再与活动的工具栏锚定。

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

    上下文操作栏:左侧横向,右侧纵向

在一个小屏幕上,

  1. 该对话框填满了屏幕
  2. 上下文操作栏会在工具栏上绘制

到目前为止,我已经尝试过

A. android文档中的fullscreen DialogFragment expample(不能添加缺less声誉的链接b / c)

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

B.添加(感谢一些post在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); 

这有点作品,它解决了我的一些我想达到点和 :“Android样本”的问题(透明背景,…)

  1. 使背景中的活动变暗

    • 作品
  2. 工具栏始终保持在相同的位置,永远不会被屏幕上的键盘推出

    • 还有一点,除了工具栏被屏幕上的键盘推出屏幕之外
  3. 在纵向模式下,对话框工具栏的底部与活动的“扩展/大”工具栏的底部alignment。 上下文操作栏(例如,用于文本select)被绘制在活动的工具栏上,并且向下推动对话框,所以它不再与活动的工具栏锚定。

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

    • 在屏幕上的键盘将工具栏推出屏幕,上下文操作栏被绘制在活动的工具栏上,但也在对话框的一部分上(对话框的工具栏的二元组被推到外面 – 我想)
  5. 它填满了屏幕

    • 作品
  6. 上下文操作栏会在对话框的工具栏上绘制

    • 上下文操作栏向下推动对话框的工具栏,留下用户两个工具栏。 看起来很奇怪,但至less是function性的。

所以,我的第一篇文章有​​点长,感谢迄今为止的所有读者。

我一直在研究这个课题已经有一段时间了。 有人说对话框片段对于非全屏显示来说并不好,应该把一个活动看作是一个对话框。 其他人则认为将活动设置为DialogFragments的对话框B / c是个不错的做法。 在这个话题上似乎没有广泛的一致意见。

有没有人有任何关于谷歌如何在日历应用程序中实现这一点的见解? (不幸的是,在AOSP资源中,只有旧的日历应用程序可用)。

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

非常感谢迈克尔

顺便说一句:大型设备testing在Android 4.1平板电脑,小型设备Android 4.1和5.0,使用支持库DialogFragment,但在过渡到“正常”的DialogFragment。

Solutions Collecting From Web of "如何在Google日历应用中使用Android对话框(全屏,embedded)"