带有键盘adjustResize的Android BottomSheetBehavior

时间:2017-03-29 12:21:37

标签: android android-softkeyboard bottom-sheet

我在活动中有以下布局。

<CoordinatorLayout ...>
  <ScrollView ...>
    <LinearLayout
      ...
      android:orientation="vertical">
      <!-- Some stuff -->
      <EditText ...>
      <!-- Some more stuff -->
      <View
        android:id="@+id/keyboard_extender"
        ...>
    </LinearLayout>
  </ScrollView>
  <LinearLayout
    android:id="@+id/bottom_sheet"
    android:orientation="vertical"
    ...
    app:layout_behavior="android...BottomSheetBehavior">
    <!-- Even more stuff -->
  </LinearLayout>
</CoordinatorLayout>

我希望键盘不要向上推bottom_sheet,但它应该向上推keyboard_extender。请注意,bottom_sheet不是BottomSheetDialog,而只是使用android.support.design.widget.BottomSheetBehavior的视图。这不能更改为BottomSheetDialog,因为我希望屏幕的其余部分与bottom_sheet

同时保持活动状态

我从未将bottom_sheet的可见性设置为View.GONE。我只将其状态从BottomSheetBehavior.EXPANDED更改为BottomSheetBehavior.COLLAPSED并返回。此外,我希望bottom_sheet仅在键盘不可用时才可见。

由于我需要keyboard_extender应始终位于键盘上方,因此我在AndroidManifest.xml中设置android:windowSoftInputMode="adjustResize"(我认为这是不可避免的)

我有一个方法,在调用时应隐藏键盘并显示bottom_sheet,但我遇到的问题是bottom_sheet同时启动动画到BottomSheetBehavior.EXPANDED键盘开始隐藏,当键盘开始隐藏时,屏幕实际上由于windowSoftInputMode="adjustResize"而调整大小,bottom_sheet从键盘顶部开始扩展,并且不会随着键盘一起向下移动键盘。因此,当键盘完全隐藏时,bottom_sheet实际上位于屏幕中间(恰好位于键盘高度之上)。

理想情况下,我希望键盘开始隐藏,bottom_sheet同时开始扩展,但bottom_sheet从屏幕底部而不是键盘顶部开始扩展

我目前用来解决这个问题的非常糟糕的解决办法是推迟bottom_sheet SoftInput.KEYBOARD_POPUP_DELAY的扩展,这似乎暂时有效。有没有更清洁的选择?

0 个答案:

没有答案