gpt4 book ai didi

android - 使用最新的 WindowInset API 出现软键盘时如何调整对话框布局

转载 作者:行者123 更新时间:2023-12-04 11:51:08 33 4
gpt4 key购买 nike

问题:
如何使用最新的 WindowInset API 调整我的对话框和软键盘之间的空间?

我有一个带有一些 EditText 的 BottomSheetDialog。默认动画将在我的 EditText 正下方显示软键盘,它将覆盖我的保存按钮。在做了一些研究之后,我将这一行添加到我的 BottomSheetDialog 中。分段

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
它起作用了(如下图所示)!
This is what I wanted
但显然 SOFT_INPUT_ADJUST_RESIZE已弃用。
   * @deprecated Call {@link Window#setDecorFitsSystemWindows(boolean)} with {@code false} and
* install an {@link OnApplyWindowInsetsListener} on your root content view that fits insets
* of type {@link Type#ime()}.
而且我不知道如何使用新的 OnApplyWindowInsetsListener达到同样的效果。
这是我目前的 BottomSheetDialog分段:
public class BottomSheetDialog extends BottomSheetDialogFragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

// Adding this line works, but it's deprecated in API 30
// getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

getDialog().getWindow().setDecorFitsSystemWindows(false);
view = inflater.inflate(R.layout.fragment_bottom_dialog_cash, container, false);
view.setOnApplyWindowInsetsListener((v, insets) -> {
Log.d("dialog", "onCreateView: ");
Insets imeInsets = insets.getInsets(WindowInsets.Type.ime());
v.setPadding(0,0,0,imeInsets.bottom);
return insets;
});
return view;
}
我在另一个 fragment 中使用了一个 onclicklistener 来显示这个对话框。代码在 Another fragment
    @Override
public void onItemClick(int position) {
BottomSheetDialog dialog = new BottomSheetDialog();
dialog.show(getParentFragmentManager(), "BottomSheetDialog");
}
事实上,日志表明当软键盘弹出时,监听器从未被触发。
仅供引用,我正在关注 this videothis blog .

最佳答案

经过更多研究,我发现如果我使用 viewBinding并替换 viewbind.getRoot() ,然后一切正常。我不知道为什么(也许我应该在 onViewCreated 中使用而不是 onCreateView ?)但代码应该对遇到同样问题的人有所帮助。

// NOTE: you have to set this in the activity instead of fragment.
getWindow().setDecorFitsSystemWindows(false);

// Only work with API30 or above!
bind.getRoot().setOnApplyWindowInsetsListener((v, insets) -> {
imeHeight = insets.getInsets(WindowInsets.Type.ime()).bottom;
bind.getRoot().setPadding(0, 0, 0, imeHeight);
return insets;
});
需要注意的一件事是 setDecorFitsSystemWindows(false) 意味着应用程序(您)负责所有系统窗口,包括状态栏和导航栏。
我还发现下面链接的教程非常有用,如果您想了解更多关于 windowInsets 和新动画回调的信息,请查看。
New WindowInsets APIs for checking the keyboard (IME) visibility and size
Window Insets and Keyboard Animations Tutorial for Android 11

关于android - 使用最新的 WindowInset API 出现软键盘时如何调整对话框布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64947700/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com