2017-10-15 291 views
1

하나의 MainActivity가있는 요구 사항이 있습니다. 이 액티비티에서는 4 개의 프래그먼트를 인스턴스화합니다 (FragmentA, FragmentB, FragmentC라고합시다)Fragments에서 windowsoftinputmode를 프로그래밍 방식으로 설정하는 방법은 무엇입니까?

3 개의 프래그먼트 (FragmentA, FragmentB, FragmentC라고합시다)에서 MainActivity의 windowsoftinputmode 나는 SOFT_INPUT_ADJUST_NOTHING에 MainActivity의 windowsoftinputmode()을 설정할)) SOFT_INPUT_ADJUST_PAN에 그래서 창.

의 크기를 조정할 수 있습니다 그리고 한 조각에() 우리가 FragmentD를 가정 해 봅시다.

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

또는

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

문제는 그것이 작동하지 않는 것입니다 :

그래서, 각 조각의 onViewCreated에() 메소드는 내가 변화의 LayoutParams 플래그 다음 코드 줄을 실행됩니다 내가 뭘 그리고 setSoftInputMode를 올바르게 할 수 없기 때문에 창 크기가 조절되는 것을 막을 수 없습니다.

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

그러나 값보다

이 네 조각 설정됩니다 : 같이 내가 MainActivity의에서 onCreate()에서 그들을 실행할 때 코드의

같은 라인이 완벽하게 작동합니다. 매니페스트 내 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 상태로 동작합니다. 그러나 AndroidManifest.xml 파일의 tag에 windowSoftInputMode = "adjustResize"를 삽입하면 app window의 크기가 기본값으로 조정됩니다. 또한, 다음 코드 줄을 호출 할 때

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

예상대로 동작하고 크기가 조정되지 않습니다. 나를 고용했습니다!

+0

이걸 시도 했습니까? 그것은 도움이 되었습니까? – batsheva

+0

예, thing은 windowsSoftInputMode를 지정하지 않고 WindowsSoftInputMode를 Fragment에서 변경하기 위해 먼저 매니페스트에서 선언해야하고 Fragment에서 프로그래밍 방식으로 변경해야합니다. – Tarun

+0

@Terri 작동하는 코드를 공유 할 수 있습니까? 현재이 문제를 겪고 있으며 아무 것도 작동하지 않습니다. – iBEK

0

iBEK's 코멘트 구현.

먼저 다음 플래그를 추가 할 수 있습니다 : :의 AndroidManifest.xml 파일에

windowSoftInputMode="adjustResize" 

을 아래와 같이 windowsSoftInputMode가 제대로 작동하려면 두 가지를 수행 할 필요

<activity 
     android:name="com.test.TestActivity" 
     android:windowSoftInputMode="adjustResize"/> 

이 플래그를 지정 windowsSoftInputMode가 작동하기 위해서는 madatory입니다.

둘째,이 경우 귀하의 활동의에서 onCreate, TestActivity에 다음을 추가합니다

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가 포함되어 있습니다. 답안에서 주어진대로 높이 차이를 100 대신 200에서 300으로 사용하십시오. – Tarun