2017-10-15 112 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

相關問題