我在活动中有以下布局。
<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
的扩展,这似乎暂时有效。有没有更清洁的选择?