2010-12-23 17 views
5

के शीर्ष पर स्लाइडिंग ड्रॉवर को कैसे रखा जाए, मैं इस दिन पूरे दिन अपने सिर को खरोंच कर रहा हूं। मेरी गतिविधियों में से एक (और केवल एक) पर जब मैं वर्चुअल कीबोर्ड को कॉल करता हूं तो स्लाइडिंग ड्रॉवर हैंडल इसके ऊपर दिखाई देता है। मैं एंड्रॉइड डालने से अपने ऐप में अन्य सभी गतिविधियों पर इस समस्या को ठीक करने में कामयाब रहा: प्रश्न में गतिविधि सहित मेरी Manafest.xml फ़ाइल में प्रत्येक गतिविधि में windowSoftInputMode = "adjustPan"। जहां तक ​​मैं यह निर्धारित करने में सक्षम हूं कि गतिविधि पर किसी भी वस्तु पर ध्यान केंद्रित नहीं किया गया है (यदि कोई मुझे यह पता नहीं लगा सकता कि इसे कैसे ढूंढें)। मैंने इसका उपयोग करके फोकस के लिए चेक किया है .getCurrentFocus() फिर देखे गए दृश्य पर view.clearFocus() कर रहा है यदि कोई था। अब तक यह एक दृश्य वापस नहीं आया है, जहां तक ​​मैं कह सकता हूं कि कुछ भी ध्यान केंद्रित नहीं कर रहा है।वर्चुअल कीबोर्ड

कोई विचार?

+1

मैं एक ही मुद्दे में भाग गया और पहले परिणाम के रूप में अपने प्रश्न पाया onCreate() में setContext() फोन बनाते हैं। यदि आपको एक कामकाजी समाधान मिल गया है तो इसे नीचे पोस्ट करने के लिए स्वतंत्र महसूस करें। – keyboardsurfer

उत्तर

0

यह मेरा कामकाज है .. एडिटटेक्स्ट रखने वाली गतिविधि में मेरे पास एक सबक्लास है जो EditText बढ़ाता है। इस सबक्लास में मैं onMeasure() विधि को ओवरराइड करता हूं जो यह देखने के लिए जांचता है कि कीबोर्ड खुला है या नहीं।

public static class MyEditText extends EditText { 
      MyActivity context; 

      public void setContext(MyActivity context) { 
       this.context = context; 
      } 

      @Override 
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
       int height = MeasureSpec.getSize(heightMeasureSpec); 
       Activity activity = (Activity)getContext(); 
       Rect rect = new Rect(); 
       activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); 
       int statusBarHeight = rect.top; 
       int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight(); 
       int diff = (screenHeight - statusBarHeight) - height; 
       // assume all soft keyboards are at least 128 pixels high 
       if (diff>128) 
        context.showHandle(false); 
       else 
        context.showHandle(true); 

       super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
      } 
    } 

फिर गतिविधि में, अगर कीबोर्ड खुला है दराज संभाल एक 1px 1px एक्स पारदर्शी छवि के लिए सेट है, अगर कीबोर्ड छिपा हुआ है असली संभाल दिखाया गया है:

private void showHandle(boolean show) { 
    ImageView drawer_handle = (ImageView) findViewById(R.drawable.handle); 
    if (show) 
      drawer_handle.setImageResource(R.drawable.handle); 
    else 
      drawer_handle.setImageResource(R.drawable.handle_blank); 
} 

अंत में, सुनिश्चित करें कि आप की MyActivity

MyEditText met = (MyEditText) findViewById(R.id.edit_text); 
met.setContext(this); 
संबंधित मुद्दे