如何从 Fragments 以编程方式设置 windowsoftinputmode?
How to set windowsoftinputmode programmatically from Fragments?
我有一个要求,其中我有一个 MainActivity。从这个 activity 我实例化 4 个片段(让我们说 FragmentA、FragmentB、FragmentC、FragmentD。
在这四个片段中;在 3 个片段上(让我们说 FragmentA、FragmentB、FragmentC),我想将 MainActivity 的 windowsoftinputmode() 设置为 SOFT_INPUT_ADJUST_PAN
以便 window 可以调整大小。
在一个 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,我无法阻止 window 调整大小。
当我在 MainActivity 的 onCreate() 中执行它们时,相同的代码行完美运行,如下所示:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
但是所有四个片段都设置了值。我在清单中的 MainActivity 声明是:
<activity
android:name="com.test.MainActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"/>
有人可以帮助我做错这件事吗?我想让不同的片段有不同的行为。
试试我发现的这个:
旨在为选项卡使用两种不同的模式。模式是 SOFT_INPUT_ADJUST_RESIZE
和 SOFT_INPUT_ADJUST_NOTHING
.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
上面的代码行本身无法正常工作。应用始终处于 ADJUST_NOTHING 状态。但是,如果将 windowSoftInputMode="adjustResize" 插入到 AndroidManifest.xml 文件中的标记中,则应用程序 window 会默认调整大小。此外,当您在 fragment
中调用以下行时
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
它将按预期运行,并且不会调整任何大小。
由我工作!
为 iBEK's 评论添加实现。
要使 windowsSoftInputMode 正常工作,需要完成两件事:
首先是添加以下标志:
windowSoftInputMode="adjustResize"
在AndroidManifest.xml文件中如下所示:
<activity
android:name="com.test.TestActivity"
android:windowSoftInputMode="adjustResize"/>
指定此标志是 windowsSoftInputMode 工作的必要条件。
其次在 Activity、TestActivity 的 onCreate 中添加以下内容:
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_ADJUST_RESIZE);
现在它应该适用于 activity 托管的所有片段。我希望这能回答你的问题@iBEK。
我有一个要求,其中我有一个 MainActivity。从这个 activity 我实例化 4 个片段(让我们说 FragmentA、FragmentB、FragmentC、FragmentD。
在这四个片段中;在 3 个片段上(让我们说 FragmentA、FragmentB、FragmentC),我想将 MainActivity 的 windowsoftinputmode() 设置为 SOFT_INPUT_ADJUST_PAN
以便 window 可以调整大小。
在一个 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,我无法阻止 window 调整大小。
当我在 MainActivity 的 onCreate() 中执行它们时,相同的代码行完美运行,如下所示:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
但是所有四个片段都设置了值。我在清单中的 MainActivity 声明是:
<activity
android:name="com.test.MainActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"/>
有人可以帮助我做错这件事吗?我想让不同的片段有不同的行为。
试试我发现的这个:
旨在为选项卡使用两种不同的模式。模式是 SOFT_INPUT_ADJUST_RESIZE
和 SOFT_INPUT_ADJUST_NOTHING
.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
上面的代码行本身无法正常工作。应用始终处于 ADJUST_NOTHING 状态。但是,如果将 windowSoftInputMode="adjustResize" 插入到 AndroidManifest.xml 文件中的标记中,则应用程序 window 会默认调整大小。此外,当您在 fragment
中调用以下行时getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
它将按预期运行,并且不会调整任何大小。 由我工作!
为 iBEK's 评论添加实现。 要使 windowsSoftInputMode 正常工作,需要完成两件事:
首先是添加以下标志:
windowSoftInputMode="adjustResize"
在AndroidManifest.xml文件中如下所示:
<activity
android:name="com.test.TestActivity"
android:windowSoftInputMode="adjustResize"/>
指定此标志是 windowsSoftInputMode 工作的必要条件。
其次在 Activity、TestActivity 的 onCreate 中添加以下内容:
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_ADJUST_RESIZE);
现在它应该适用于 activity 托管的所有片段。我希望这能回答你的问题@iBEK。