2012-10-13 10 views
5

użyłem ActionBarSherlock stworzyć ActionBar Posiada przycisk wyszukiwania, które przedstawia AutoCompleteEditText (SHOW_AS_COLLAPSIBLE_ACTION_VIEW) Kiedy przycisk Szukaj kliknięciu EditText pokazano, chcę EditText aby uzyskać ostrość, a tym samym pokazać, klawiatury programowej, jak to rozbudowany ten jest to kodJak ustawić ostrość i pokazać miękką klawiaturę, gdy EditText jest wyświetlany na pasku akcji?

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.activity_main, menu); 

    boolean isLight = true; 
    // Add Search button 
    int menuItemId = menu 
      .add("Search") 
      .setIcon(
        isLight ? R.drawable.ic_search_inverse 
          : R.drawable.ic_search) 
      .setActionView(R.layout.collapsible_edittext) 
      .setShowAsActionFlags(
        MenuItem.SHOW_AS_ACTION_ALWAYS 
          | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW) 
      .getItemId(); 
    // Add Search Topic (Sub Menu) 
    SubMenu subMenu1 = menu.addSubMenu("Topic"); 
    subMenu1.add(Menu.NONE, 10, 0, "All Topics"); 
    subMenu1.add(Menu.NONE, 11, 1, "Adult"); 
    subMenu1.add(Menu.NONE, 12, 2, "Pediatric"); 
    subMenu1.add(Menu.NONE, 13, 13, "Drug"); 

    MenuItem subMenu1Item = subMenu1.getItem(); 
    subMenu1Item.setIcon(R.drawable.abs__ic_menu_moreoverflow_holo_light); 
    subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

    searchBar = (AutoCompleteTextView) menu.findItem(menuItemId) 
      .getActionView().findViewById(R.id.etSearch); 

    setSearchSettings(searchMenuID); 

    // get instance of Search Button 
    searchWidgetItem = menu.findItem(menuItemId); 

    searchBar 
      .setOnEditorActionListener(new EditText.OnEditorActionListener() { 


       @Override 
       public boolean onEditorAction(TextView v, int actionId, 
         KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_SEARCH) { 

         // Perform a Search 
         performSearch(v.getText().toString(), 
           (searchMenuID < 0) ? 3 : searchMenuID); 

         imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 

         // Collapse the ActionView (Search Bar) 
         searchWidgetItem.collapseActionView(); 

         // Clear the TextEdit 
         v.setText(""); 

         return true; 
        } 
        return false; 
       } 
      }); 
    return true; 
} 

próbowałem ustawić OnFocusChangeListener na EditText i pokazać Miękkie Keboard jeśli ma skupić, ale nie zrobił pracował:

searchBar.setOnFocusChangeListener(new OnFocusChangeListener() { 

      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.showSoftInput(v, InputMethodManager.SHOW_FORCED); 
       } 
      } 
     }); 

Jak to zrobić?

Odpowiedz

5

Znaleziono rozwiązanie:

searchWidgetItem.setOnActionExpandListener(new OnActionExpandListener() { 

      @Override 
      public boolean onMenuItemActionExpand(MenuItem item) { 
       searchBar.post(new Runnable() { 
        @Override 
        public void run() { 
         searchBar.requestFocus(); 
         imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
         imm.showSoftInput(searchBar, 
           InputMethodManager.SHOW_IMPLICIT); 
        } 
       }); 
       return true; 
      } 

      @Override 
      public boolean onMenuItemActionCollapse(MenuItem item) { 

       return true; 
      } 
}); 
+0

Dlaczego trzeba umieścić Runnable ? –

4

Jeśli nadal masz problem, więc wywołać następującą metodę

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

zamiast

imm.showSoftInput(searchBar, InputMethodManager.SHOW_IMPLICIT); 
+0

Próbowałem wielu rzeczy, ale dodanie 'HIDE_IMPLICIT_ONLY' zrobiło dla mnie różnicę. – kaka

Powiązane problemy