2012-02-03 17 views
5

में मुलायम कीबोर्ड दिखाएं मैं 3 खंड के साथ व्यूपेगर का उपयोग करता हूं। पहले व्यक्ति में केवल टेक्स्ट है। दूसरा, एक इनपुट फ़ील्ड। तीसरा, केवल पाठ।एंड्रॉइड व्यूपेजर गलत जगह

जब व्यूपार्जर प्रारंभ होता है, तो सॉफ्ट कीबोर्ड दिखाया जाता है, क्योंकि फोकस इनपुट फ़ील्ड सेट किया जाता है। अगर मैं खंड का क्रम बदलता हूं, तो सॉफ्ट कीबोर्ड नहीं दिखाया जाता है।

मैं 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

सभी के लिए धन्यवाद, टिममएम बहुत उपयोगी थे। मैंने आखिरकार सब कुछ लपेट लिया और टैब स्वाइपिंग के लिए एक पूर्ण सॉफ्ट-कीबोर्ड छुपा समाधान मिला। मेरे पास प्रत्येक टैब पर संपादन टेक्स्ट के साथ 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> 
संबंधित मुद्दे