2013-06-19 2 views
8

में मेरे पास कॉर्डोवा वेब दृश्य है जो कुछ HTML फॉर्म प्रस्तुत करता है। जब मैं इनपुट फ़ील्ड पर ध्यान केंद्रित करता हूं, तो एंड्रॉइड का सॉफ्ट कीबोर्ड पॉप अप करता है और, कुछ क्षेत्रों के लिए, उनकी स्थिति के अनुसार, यह इसके शीर्ष पर आता है। असल में, यह कॉर्डोवा वेब दृश्य के लेआउट का आकार बदल नहीं रहा है।एंड्रॉइड सॉफ्ट कीबोर्ड कॉर्डोवावेब व्यू से इनपुट छुपाता है जब पूर्णस्क्रीन

जो कुछ भी मैं करता हूं, मैं इसे नहीं बदल सकता, और ऐसा कहा जाता है कि यह इस तथ्य से संबंधित है कि कॉर्डोवा वेब दृश्य पूर्णस्क्रीन मोड में है।

मैं इसे हल करने के लिए कैसे पूरा कर सकता हूं?

पीएस: क्या यह एक बग है या नहीं?

सभी को धन्यवाद!

उत्तर

5

वास्तव में, यह एक अच्छी तरह से पता है, क्योंकि @ user2493245 ने कहा। लेकिन मुझे कम से कम मेरे विशिष्ट मामले के बारे में एक कामकाज मिला।

वेबव्यू पर, दृश्य के दृश्य क्षेत्र के लिए निर्देशांक की जांच करें।

final View activityRootView = this.root; 
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    public void onGlobalLayout() { 
     Rect r = new Rect(); 
     //r will be populated with the coordinates of your view that area still visible. 
     activityRootView.getWindowVisibleDisplayFrame(r); 

     int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top); 
     if(heightDiff != lastValue) { 
      if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... 
       appView.sendJavascript("onKeyBoardShow(" + r.bottom + ");"); 
      } else { 
       appView.sendJavascript("onKeyBoardHide();"); 
      } 
      lastValue = heightDiff; 
     } 
    } 
}); 

जैसा कि आप देख सकते हैं, मैं उस जानकारी को वेब व्यू में भेजता हूं। एचटीएमएल पर, मैं इस दो तरीकों मुद्दे को सुलझाने के लिए है:

function onKeyBoardShow(bottom) { 
    var diff = ($('input[type=text]:focus').offset().top - bottom) + 50; 
    if(diff > 0) { 
     $('body').css("top", (diff * -1) + "px"); 
    } 
}; 

function onKeyBoardHide() { 
    $('body').css("top", "0px"); 
}; 

असल में, onKeyBoardShow, यह इनपुट क्षेत्र ध्यान केंद्रित हो जाता है और पिक्सल है कि शरीर को स्थानांतरित करने के लिए आवश्यक हो जाएगा की राशि की गणना, देखने के लिए उपयोगकर्ता की अनुमति देता है इनपुट क्षेत्र onKeyBoardHide, बस शरीर को अपनी मूल स्थिति में डाल देता है।

पीएस: यह केवल तभी कार्य करता है जब व्यूपोर्ट devicedpi को लक्षित करता है, क्योंकि हमें डिवाइस के डीपीआई के संबंध में भिन्नता को संशोधित करने की आवश्यकता होती है।

पीएस 2: कोड की पहली राशि मेरा नहीं है, मैंने केवल अपनी जरूरतों को पूरा करने के लिए संपादित किया है। मैंने देखा कि एक SO सवाल पर, लेकिन दुर्भाग्य से अब मुझे यह नहीं मिल रहा है। अगर मुझे लगता है, तो मैं यहां लिंक पोस्ट करूंगा।

+0

"lastValue" कैसे प्राप्त करें? –

+0

@AnasAzeem जब क्रिएट(), मैं 'lastValue = 0' init। उदाहरण में इसे जोड़ने के लिए भूल गए। चियर्स! –

1

मुझे एक ही समस्या है और मुझे पता चला कि यह एक प्रसिद्ध बग है।

एक कामकाज यह हो सकता है कि आप एक प्लगइन लिखें जो सॉफ्टकीबोर्ड पॉप अप होने से पहले पूर्णस्क्रीन को अक्षम करता है और बाद में इसे पुनः सक्षम करता है।

+0

आपके उत्तर के लिए धन्यवाद, लेकिन मुझे एक आसान तरीका मिल गया है, कि मैं तुरंत पोस्ट करूंगा। :) –

0

प्रकट से android:theme="@android:style/Theme.NoTitleBar.Fullscreen" निकालें, और कोड के इन 2 पंक्तियां जोड़ें:

requestWindowFeature(Window.FEATURE_NO_TITLE); 
getWindow().addFlags(LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

सुनिश्चित करें कि आपके onCreate विधि इस तरह दिखता है बनाओ:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().addFlags(LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.yourLayout); 

     // Your code ... 
} 

और सब कुछ काम करेंगे: डी।

+0

यह काम नहीं करता !! –

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