如何以编程方式从片段设置windowsoftinputmode?
我有一个需求,我有一个MainActivity。从这个活动我实例化4片段(让我们说,片段A,片段B,片段C,片段D)如何以编程方式从片段设置windowsoftinputmode?
在这四个片段;在3片段(让我们说FragmentA,FragmentB,FragmentC),我想设置MainActivity的windowsoftinputmode )到SOFT_INPUT_ADJUST_PAN
以便窗口可以调整大小
并且在一个片段()上让我们说FragmentD),我想将MainActivity的windowsoftinputmode()设置为SOFT_INPUT_ADJUST_NOTHING
。
所以我要做的就是,每个片段的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);
但比的值被设置为所有四个片段。清单中的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文件的标记中,则应用程序窗口将被调整为默认值。此外,当您拨打片段中的以下行时
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
它将按预期工作并且不会调整大小。 由我工作!
为iBEK's评论添加实施。需要 两件事情要做的windowsSoftInputMode正常工作:
首先是添加以下标志:在AndroidManifest.xml文件
windowSoftInputMode="adjustResize"
,如下图所示:
<activity
android:name="com.test.TestActivity"
android:windowSoftInputMode="adjustResize"/>
指定这个标志是疯狂的windowsSoftInputMode工作。
其次添加在这种情况下,您的活动的onCreate,测试活动如下:
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_ADJUST_RESIZE);
现在应该该活动承载的所有片段的工作。我希望这回答了你的问题@iBEK。
我真的这样做了,它只是推动布局,让键盘房间在屏幕的底部。它在一些较大的设备上可能看起来不错,但在较小的设备上,一切都在彼此之上。 – iBEK
是的,这是它的目的,调整应用程序的大小以适应键盘。如果您希望任何侦听器执行任何调整以查看,您应该调整视图以查看显示键盘的这种情况,您可以使用OnGlobalLayoutListener。参考链接:https://stackoverflow.com/questions/4312319/how-to-capture-the-virtual-keyboard-show-hide-event-in-android 不要去接受答案,但去第二个答案其中包含由@amalBit OnGlobalLayoutListener使用高度差为“200至300”,而不是100在答案中给出。 – Tarun
你尝试过吗?它有帮助吗? – batsheva
是的,事情是,我没有指定windowsSoftInputMode,并从片段更改windowsSoftInputMode,它需要首先在清单中声明,并从编程方式从片段更改。 – Tarun
@Terri你能分享一下你的代码吗?我目前正在解决这个问题,似乎没有任何工作。 – iBEK