gpt4 book ai didi

android - 如何从 Fragments 以编程方式设置 windowsoftinputmode?

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:44 25 4
gpt4 key购买 nike

我有一个要求,其中我有一个 MainActivity。从这个 Activity 中,我实例化了 4 个 fragment (让我们说 FragmentA、FragmentB、FragmentC、FragmentD。

在这四个 fragment 中;在 3 个 fragment (让我们说 FragmentA、FragmentB、FragmentC)上,我想将 MainActivity 的 windowsoftinputmode() 设置为 SOFT_INPUT_ADJUST_PAN 以便窗口可以调整大小。

在一个 Fragment() 上,让我们说 FragmentD),我想将 MainActivity 的 windowsoftinputmode() 设置为 SOFT_INPUT_ADJUST_NOTHING

所以我所做的是,在每个 Fragment 的 onViewCreated() 方法上,我执行以下代码行并更改 LayoutParams 标志:

((MainActivity)getActivity()).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);

((MainActivity)getActivity()).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

问题是它不工作,我无法正确设置 SoftInputMode,我无法阻止窗口调整大小。

当我在 MainActivity 的 onCreate() 中执行它们时,相同的代码行完美地工作,如下所示:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

但是所有四个 fragment 都设置了值。我在 list 中的 MainActivity 声明是:

<activity
android:name="com.test.MainActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"/>

有人可以帮助我做错这件事吗?我想让不同的 fragment 有不同的行为。

最佳答案

试试我发现的这个:

旨在为选项卡使用两种不同的模式。模式是 SOFT_INPUT_ADJUST_RESIZESOFT_INPUT_ADJUST_NOTHING

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

上面的代码行本身是行不通的。应用始终处于 ADJUST_NOTHING 状态。但是,如果将 windowSoftInputMode="adjustResize"插入到 AndroidManifest.xml 文件中的标记中,应用程序窗口将默认调整大小。此外,当您在 fragment 中调用以下行时

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);

它将按预期运行,并且不会调整任何大小。由我工作!

关于android - 如何从 Fragments 以编程方式设置 windowsoftinputmode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46751925/

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