2012-02-03 9 views
5

私は3つのフラグメントを持つViewPagerを使用します。 最初の文字はテキストのみです。 2番目の入力フィールド。 3番目のテキストのみ。Android ViewPagerはソフトキーボードを間違った場所に表示します

フォーカスが入力フィールドに設定されているため、ViewPagerを初期化すると、ソフトキーボードが表示されます。 フラグメントの順序を変更すると、ソフトキーボードは表示されません。

ViewPagerでフォーカスとソフトキーボードを制御する方法はありますか?

よろしく

+0

ソフトキーボードを強制的に非表示にすることができます。もっと詳しくはこちら: http://stackoverflow.com/questions/1109022/how-to-close-hide-the-android-soft-keyboard –

答えて

1

私はこれを行うには良い方法があると確信しているが、私は同じ問題を抱えていたと私はフォーカス可能に親Viewを設定することで、周りにそれを得ました。あなたがページ間をスワイプするときにフォーカスを受け取ることができませんポップアップからソフトキーボードを引き起こしているものは何でもそのように、...

<!-- Dummy item to prevent your View from receiving focus --> 
<LinearLayout 
    ... 
    android:focusable="true" 
    android:focusableInTouchMode="true" /> 

    <!-- The view(s) that are causing the keyboard to pop up each time you swipe --> 
    <EditText ... /> 

</LinearLayout> 
+0

悲しいことに、悲しいことに、 edittexts。 – Timmmm

5

私がこれまでに見つけた最良の解決策は、あなたの活動のマニフェストにandroid:windowSoftInputMode="stateHidden"を使用することであり、これをあなたの活動に加えてください。

@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); 
     } 
    } 
} 

私はスワイプアニメーションを非表示キーボードアニメーションネジのでonPageSelected()を使用していませんでした。また、入力不要フラグメントにスワイプしてもキーボードは隠されていないので、android:focusableトリックは使用しませんでした。私はあなたが上記のコードと組み合わせることができると思いますが。

0

皆様に感謝して、Timmmmは非常に役に立ちました。 私は最終的にすべてを包んで、タブスワイピングのための完全なソフトキーボード非表示のソリューションを得ました。 それぞれに4つのタブがあり、スワイプ時にキーボードを隠す必要があります。活動コードに追加された

<!--Fixes keboard pop-up--> 
<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="0dp" 
    android:background="@android:color/transparent" 
    android:focusable="true" 
    android:focusableInTouchMode="true"> 
</LinearLayout> 

は(Timmmmの答えと少し違いに気付く: 私は、フラグメントレイアウトにこれを追加私はここに

mViewPager.getCurrentItem() == 0 

を持っていない、私は非表示にする必要があるため、すべてのビューのためのキーボード:

// When swiping between different sections, select the corresponding 
    // tab. We can also use ActionBar.Tab#select() to do this if we have 
    // a reference to the Tab. 
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      if (actionBar != null) { 
       actionBar.setSelectedNavigationItem(position); 
      } 
     } 
     @Override 
     public void onPageScrollStateChanged(int state) 
     { 
      if (state == ViewPager.SCROLL_STATE_IDLE) 
      { 
       // Hide the keyboard. 
       ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)) 
         .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0); 

      } 
     } 
    }); 

そして、ここではのAndroidManifest.xmlでの活動であります

<activity 
     android:name=".TestActivity" 
     android:label="@string/title_activity_test" 
     android:parentActivityName=".MainActivity" 
     android:windowSoftInputMode="stateHidden"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.atrinax.test.MainActivity" /> 
</activity> 
関連する問題