2012-02-03 30 views
5

Tôi sử dụng một ViewPager với 3 đoạn. Người đầu tiên chỉ có văn bản. Trường thứ hai, một trường nhập. văn bản thứ ba, duy nhất.Android ViewPager hiển thị bàn phím ảo ở sai vị trí

Khi ViewPager được khởi tạo, bàn phím mềm hiển thị, vì tiêu điểm được đặt trường nhập. Nếu tôi thay đổi thứ tự của đoạn, bàn phím mềm sẽ không hiển thị.

Tôi có thể điều khiển bàn phím lấy nét và bàn phím mềm bằng ViewPager bằng cách nào?

Trân

+0

Có thể bạn có thể buộc ẩn phím mềm. Thông tin chi tiết tại đây: http://stackoverflow.com/questions/1109022/how-to-close-hide-the-android-soft-keyboard –

Trả lời

1

tôi chắc chắn rằng có một cách tốt hơn để làm điều này, nhưng tôi đã có cùng một vấn đề và tôi đã nhận xung quanh nó bằng cách thiết lập phụ huynh View để đặt tiêu điểm. Bằng cách đó, bất cứ điều gì gây ra bàn phím mềm từ popping lên sẽ không nhận được tập trung khi bạn vuốt giữa các trang ...

<!-- 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

Đáng buồn là nó không ẩn bàn phím khi bạn quay trở lại một đoạn không có edittexts. – Timmmm

5

Giải pháp tốt nhất mà tôi đã tìm thấy cho đến nay là sử dụng android:windowSoftInputMode="stateHidden" trong manifest của hoạt động của bạn, và sau đó thêm nó vào hoạt động của bạn.

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

Tôi không sử dụng onPageSelected() vì hình động ẩn bàn phím bằng hình động vuốt. Và tôi đã không sử dụng mẹo android:focusable vì bàn phím không bị ẩn khi bạn vuốt lại thành đoạn không cần nhập liệu. Mặc dù tôi cho rằng bạn có thể kết hợp điều đó với mã trên.

0

Nhờ tất cả mọi người, Timmmm rất hữu ích. Cuối cùng tôi đã gói mọi thứ lên và có một giải pháp ẩn bàn phím mềm đầy đủ để vuốt tab. Tôi có 4 tab với editTexts trên mỗi tab và tôi cần phải ẩn bàn phím khi vuốt. tôi thêm này để bố trí đoạn:

<!--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> 

Đó đã được thêm vào Hoạt động Mã (nhận thấy một sự khác biệt nhỏ với câu trả lời của một Timmmm: Tôi đã không có

mViewPager.getCurrentItem() == 0 

đây, bởi vì tôi cần phải che giấu bàn phím cho mỗi view:

// 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); 

      } 
     } 
    }); 

Và đây là một hoạt động trong 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> 
Các vấn đề liên quan