8

我有一個Android應用程序,其中包含一個ViewPager與2片段。第一個片段包含一個EditText字段。當應用程序啓動時,該字段立即關注並啓動軟鍵盤(我希望發生這種情況)。第二個片段僅包含一個列表(不可編輯的文本字段)。當我從片段1滑動到片段2時,我想讓鍵盤消失。我試過的東西似乎沒有用。鍵盤不僅保留在視圖中,還繼續更新片段1的EditText字段。隱藏Android App中的軟鍵盤從ViewPager碎片

我想我要麼使用不正確的代碼隱藏鍵盤或將其放置在不正確的位置。如果任何人都可以發佈正確實施的例子,將不勝感激!

我最新的嘗試是把代碼應該隱藏在片段1的onDetach鍵盤()方法:

@Override 
public void onDetach() 
{ 
    super.onDetach(); 

    InputMethodManager imm = (InputMethodManager) this.context.getSystemService(Context.INPUT_METHOD_SERVICE); 

    // I'VE TRIED ALL THREE BELOW, NONE OF THEM WORK... 

     // imm.hideSoftInputFromWindow(this.messageView.getWindowToken(), 0); 
     // imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
     // this.context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
} 

回答

10

請參閱this answer.基本上,您需要讓ViewPager的OnPageChangeListener爲您隱藏鍵盤。 (如果你希望你的重擊動畫保持平滑,在onPageScrollStateChanged而不是onPageSelected做到這一點。)

@Override 
public void onPageScrollStateChanged(int state) 
{ 
    if (state == ViewPager.SCROLL_STATE_IDLE) 
    { 
     if (mViewPager.getCurrentItem() == 0) 
     { 
      // Hide the keyboard. 
      ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)) 
       .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0); 
     } 
    } 
} 
0

在你AndroidManifest你應該添加到活動聲明的android:windowSoftInputMode = 「stateHidden」:

<activity 
     android:name="YourActivity"    
     android:windowSoftInputMode="stateHidden">   
</activity> 

而且在佈局從EditText上的孩子requestFocus的刪除:

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="15dp" 
    android:ems="10" > 
    <requestFocus /> 
</EditText> 
+0

這是不是阻止顯示所有的時間鍵盤?我只想將它隱藏在片段2上。 – Jabari

+0

這可以防止在活動加載碎片時顯示軟鍵盤。但是如果你點擊一些EditText,軟鍵盤將會顯示。影響您的活動加載的所有片段。對於總是隱藏並且不顯示永不軟鍵盤,在清單中,您應該在android:windowSoftInputMode中使用stateAlwaysHidden。對不起我的英語不好。 – ClarkXP

+0

幾乎可以工作,但當您切換回不同的片段時,鍵盤不會隱藏。 – Timmmm

0
getActivity().getWindow().setSoftInputMode(
        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);