【问题标题】:Modal BottomSheetDialog with fullscreen ToolBar and Softkeyboard带有全屏工具栏和软键盘的模态 BottomSheetDialog
【发布时间】:2019-05-04 21:39:52
【问题描述】:

如何创建一个模态BottomSheetDialog(Fragment),它使用工具栏切换到全屏,如Material Design Spec 所示?

可以通过添加BottomSheetBehavior.BottomSheetCallback 并根据 slideOffset 设置 ToolBar 的 alpha 来手动添加 ToolBar。这有点笨拙,但在移动底部表时似乎有效。但是,当我的底部工作表包含 EditText 并显示键盘时,这不起作用。我尝试了两个版本:BottomSheetDialogFragment 并手动将行为添加到新片段。

  • 有没有更简单的方法来实现这一点?
  • 当显示键盘并且底部工作表用完整个空间时,我可以触发工具栏吗?

【问题讨论】:

  • 另外你需要分享你的代码
  • @dipdipdip 如果您将BottomSheet主布局容器 设为可聚焦会怎样。这样一来,您的EditText 最初不会获得焦点!
  • @dipdipdip 我无法理解您是否需要材料设计功能的完整解决方案或解决您已经创建的内容中的特定错误;如果是后者,你真的应该给我们一些代码(正如 Nilesh Rathod 建议的那样)或者至少是错误的屏幕截图
  • @AdamMc331 我没有考虑新的 MotionLayout。也许我会试一试。但我不想失去正常的BottomSheetBehavior。我希望这能一起工作。

标签: android android-toolbar android-softkeyboard bottom-sheet


【解决方案1】:

我面临同样的问题。 这就是我解决的问题。 行为隐藏在BottomSheetDialog中,可用于获取行为 如果您不想将父布局更改为 CooridateLayout, 你可以试试这个。

第 1 步:自定义 BottomSheetDialogFragment

open class CBottomSheetDialogFragment : BottomSheetDialogFragment() {
   //wanna get the bottomSheetDialog
   protected lateinit var dialog : BottomSheetDialog 
   override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
      dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
      return dialog
   }

   //set the behavior here
   fun setFullScreen(){
      dialog.behavior.state = STATE_EXPANDED
   }
}

第 2 步:让您的片段扩展此自定义片段

class YourBottomSheetFragment : CBottomSheetDialogFragment(){

   //make sure invoke this method after view is built
   //such as after OnActivityCreated(savedInstanceState: Bundle?)
   override fun onStart() {
      super.onStart()
      setFullScreen()//initiated at onActivityCreated(), onStart()
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多