2017-10-15 74 views
1

我有一个需求,我有一个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"/> 

有人可以帮助我在这做错了什么。我想对不同的片段有不同的行为。

回答

2

试试这个,我发现:

目的使用两种不同模式的标签。模式为SOFT_INPUT_ADJUST_RESIZESOFT_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); 

它将按预期工作并且不会调整大小。 由我工作!

+0

你尝试过吗?它有帮助吗? – batsheva

+0

是的,事情是,我没有指定windowsSoftInputMode,并从片段更改windowsSoftInputMode,它需要首先在清单中声明,并从编程方式从片段更改。 – Tarun

+0

@Terri你能分享一下你的代码吗?我目前正在解决这个问题,似乎没有任何工作。 – iBEK

0

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。

+0

我真的这样做了,它只是推动布局,让键盘房间在屏幕的底部。它在一些较大的设备上可能看起来不错,但在较小的设备上,一切都在彼此之上。 – iBEK

+0

是的,这是它的目的,调整应用程序的大小以适应键盘。如果您希望任何侦听器执行任何调整以查看,您应该调整视图以查看显示键盘的这种情况,您可以使用OnGlobalLayoutListener。参考链接:https://stackoverflow.com/questions/4312319/how-to-capture-the-virtual-keyboard-show-hide-event-in-android 不要去接受答案,但去第二个答案其中包含由@amalBit OnGlobalLayoutListener使用高度差为“200至300”,而不是100在答案中给出。 – Tarun

相关问题