2013-07-11 7 views
7

पर कहीं और क्लिक करते समय SearchView को फोकस और पतन कैसे करें, मेरे ऐप में, मैं search interface बना रहा हूं जिसमें SearchView ध्वस्त हो जाता है और जब यह खो देता है और क्रमशः ध्यान केंद्रित करता है तो विस्तार करता है। हालांकि, खोने वाली फोकस चीज केवल दो मामलों में हो रही है:गतिविधि

  1. जब बैक बटन दबाया जाता है।

  2. जब SearchView के बगल में स्थित होम आइकन दबाया जाता है।

मैं इन दोनों बातों पर न केवल क्लिक करता है, लेकिन कहीं भी स्क्रीन पर यदि (यह ध्यान केंद्रित खो (और इसलिए पतन) करना चाहते हैं जैसे, किसी भी बटन या एक दृश्य के बिना स्क्रीन के किसी भी खाली भाग इस पर)।

उत्तर

8

अच्छी तरह से मुझे निम्नलिखित समाधान मिला। मैंने प्रत्येक दृश्य पर setOnTouchListener का उपयोग किया जो खोजदृश्य को संक्षिप्त करने के लिए खोजदृश्य का उदाहरण नहीं है। यह मेरे लिए सही काम किया। कोड निम्नलिखित है।

public void setupUI(View view) { 

    if(!(view instanceof SearchView)) { 

     view.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       searchMenuItem.collapseActionView(); 
       return false; 
      } 

     }); 
    } 

    //If a layout container, iterate over children and seed recursion. 
    if (view instanceof ViewGroup) { 

     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 

      View innerView = ((ViewGroup) view).getChildAt(i); 

      setupUI(innerView); 
     } 
    } 
} 

This वह उत्तर है जिसका मैंने उल्लेख किया था।

+0

बढ़िया है, आपका जवाब उपयोगी है, लेकिन अब यह स्वीकार;)! – JJ86

+1

तो क्या आप खोज दृश्य को छोड़कर पदानुक्रम में प्रत्येक दृश्य पर एक स्पर्श श्रोता सेट करते हैं? क्या होगा अगर उनके पास पहले से ही श्रोताओं को स्पर्श किया जाए? – alexbirkett

0

यह मेरे लिए काम करता है, mOptionsMenu onCreateOptionsMenu में सहेजा गया है:

public void setupUI(View view) { 

    //Set up touch listener for non-text box views to hide keyboard. 
    if(!(view instanceof EditText)) { 

     view.setOnTouchListener(new View.OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       hideSoftKeyboard(MainActivity.this); 
       if(mOptionsMenu == null) return false; 
       MenuItem searchMenuItem = mOptionsMenu.findItem(R.id.action_search); 
       if(searchMenuItem == null) return false; 
       ((SearchView)searchMenuItem.getActionView()).clearFocus(); 
       return false; 
      } 

     }); 
    } 

    //If a layout container, iterate over children and seed recursion. 
    if (view instanceof ViewGroup) { 

     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 

      View innerView = ((ViewGroup) view).getChildAt(i); 

      setupUI(innerView); 
     } 
    } 
} 

public static void hideSoftKeyboard(Activity activity) { 
    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
} 
संबंधित मुद्दे