gpt4 book ai didi

android - ViewPager 中的 setSoftInputMode() - 意外行为

转载 作者:行者123 更新时间:2023-11-30 01:19:46 29 4
gpt4 key购买 nike

我在 ViewPager 中有 2 个 fragment ,我希望窗口根据第二个 fragment 上的软键盘进行不同的调整。这是我正在尝试的:

@Override
public void onPageSelected(int position) {
if(position == 1){ // desired for 2nd fragment
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
} else { // desired for 1st fragment
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED);
}
}

观察到的行为:

  • 输入第一个 fragment ,默认的 softInputMode 正常工作,正如预期的那样。
  • 滑动到第二个 fragment ,断点显示 softInputMode 应设置为 ADJUST_NOTHING但一切仍像默认值一样
  • 向后滑动 到第一个 fragment ,它的行为与ADJUST_NOTHING 一致。
  • 现在来回滑动会显示两个 fragment 的行为类似于 ADJUST_NOTHING,即使断点显示正在执行这些调用也是如此。

最重要的是,我可以随心所欲地切换 fragment ,输入模式将作为默认模式运行,直到我拉起软键盘。然后它开始向 ADJUST_NOTHING 迁移。我很困惑。

虽然在我的 Activity onCreate() 中我确实将输入模式设置为 SOFT_INPUT_STATE_ALWAYS_HIDDEN,但我在 list 中没有任何相关标志。

最佳答案

我找到的解决方案运行良好,但我希望在某处有更顺畅的解决方案。我做了两件事。

首先,我停止使用 SOFT_INPUT_ADJUST_UNSPECIFIED 作为我的“默认”输入状态,因为 WindowManager 似乎对这种状态的变化处理方式略有不同。 “SOFT_INPUT_ADJUST_RESIZE”给出了我想要的行为,因此我将方法更改为

@Override
public void onPageSelected(int position) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
);
hide_keyboard(activity);
if(position == 1){ // desired for 2nd fragment
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
} else { // desired for 1st fragment
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
}

这解决了“卡在某种输入模式”的问题。仍然,我没有在我的第二个 fragment 上获得我想要的输入模式,所以我添加了一个调用来设置输入模式,然后在我的第二个 fragment 中启动带有文本输入字段的 DialogFragments。

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING); // fragment behind doesn't get readjusted from keyboard.
editCatFragment.show(getActivity().getSupportFragmentManager(), "editCatFrag");

这实际上并不能保证第一次启动 fragment 时我想要的模式,但可以让它第二次运行,由于我的应用程序的设计方式,实际上可以正常运行。

希望这对某人有所帮助,并希望有更好的方法来解决这个问题。谢谢!

关于android - ViewPager 中的 setSoftInputMode() - 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37288291/

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