11

शुरू में मैं अपने गतिविधि सेट निम्न कोड के साथ इमर्सिव मोड में होने की जब नरम कुंजीपटल गायब हो जाता है प्रकट होता है एडिटटेक्स्ट पर क्लिक और सॉफ्ट कीबोर्ड दिखाई देता है। यह स्थिति बार को शीर्ष पर चिपकने का कारण बनता है और मुलायम कीबोर्ड गायब होने के बाद भी कभी पीछे नहीं छिपाता है। आश्चर्यजनक रूप से पर्याप्त, मुझे केवल एलजी/सैमसंग फोन पर इस समस्या का सामना करना पड़ता है, सोनी फोन को इसके साथ कोई समस्या नहीं है। किसी के बारे में इस बारे में कोई विचार है?स्थिति पट्टी जब नरम कुंजीपटल दिखाई देता है लेकिन वापस नहीं छिपा हुआ है, जबकि इमर्सिव मोड में

+0

क्या आपको कोई समाधान मिला? – user18853

+4

हां :) स्पष्ट रूप से मुझे true को मेरी गतिविधि के xml –

+0

@AndriantoLie में जोड़ने की आवश्यकता है आपकी टिप्पणी सही है। कृपया इसे एक उत्तर के रूप में जोड़ें और भविष्य के पाठकों के लिए इसे स्वीकार करें। –

उत्तर

5

इस तरह इमर्सिव मोड का उपयोग करें।

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 
     immersiveMode(); 
     getWindow().getDecorView().setOnSystemUiVisibilityChangeListener 
      (new View.OnSystemUiVisibilityChangeListener() { 
       @Override 
       public void onSystemUiVisibilityChange(int visibility) { 
        immersiveMode(); 
       } 
      }); 
    } 

यहां आपका इमर्सिव मोड फ़ंक्शन है।

public void immersiveMode() { 
     final View decorView = getWindow().getDecorView(); 
     decorView.setSystemUiVisibility(
       View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
         | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
         | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
         | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
         | View.SYSTEM_UI_FLAG_FULLSCREEN 
         | View.SYSTEM_UI_FLAG_IMMERSIVE); 
       } 

इसके अलावा OnResume में immersiveMode()() कहते हैं; अब स्टेटस बार गायब हो जाएगा क्योंकि आपका सॉफ्ट कुंजी बोर्ड गायब हो जाता है।

+3

मूल रूप से सही है, लेकिन ओवरकिल का थोड़ा सा: 1) बस अपने ऑनक्रेट() में श्रोता जोड़ें, इसे जोड़ने की आवश्यकता नहीं है; 2) दृश्यता> 0 अगर आपको केवल इमर्सिव मोड() को कॉल करने की आवश्यकता है –

0

यहां मेरा समाधान है;

getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 

      Rect r = new Rect(); 
      getWindow().getDecorView().getWindowVisibleDisplayFrame(r); 
      int screenHeight = getWindow().getDecorView().getRootView().getHeight(); 

      int keypadHeight = screenHeight - r.bottom; 

      //Log.d(TAG, "keypadHeight = " + keypadHeight); 

      if (keypadHeight > screenHeight * 0.15) { 
       //Keyboard is opened 
       hideNavBar(); 
      } 
      else { 
       // keyboard is closed 
      } 
     } 
    }); 

और मैं जब मुलायम कीबोर्ड दिखाया है एक hideNavBar() विधि शुरू किया जा करने के लिए है: सबसे पहले मैं अगर मुलायम कीबोर्ड दिखाया या नहीं है की जाँच की।

private void hideNavBar() { 
if (Build.VERSION.SDK_INT >= 19) { 
    View v = getWindow().getDecorView(); 
    v.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
      | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); 
} 

}

यह नेविगेशन पट्टी हो रही है, जबकि वहाँ एक Edittext टाइप किया जा रहा है की समस्या का हल।

संबंधित मुद्दे