2012-10-13 57 views
5

我用ActionBarSherlock創建動作條 它有一個搜索按鈕,顯示一個AutoCompleteEditTextSHOW_AS_COLLAPSIBLE_ACTION_VIEW) 當點擊搜索按鈕,EditText顯示,我想EditText獲得焦點,從而顯示出軟鍵盤,因爲它擴大了 這是我試圖設置的EditText一個OnFocusChangeListener並顯示軟接口的鍵盤,如果它具有焦點代碼如何在操作欄中顯示EditText時對焦並顯示軟鍵盤?

@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; 
} 

,但它沒有工作:

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); 
       } 
      } 
     }); 

如何做到這一點?

回答

5

找到了解決辦法:

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

爲什麼你需要發佈一個Runnable ? –

4

如果您仍然有問題,所以叫下面的方法

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

,而不是

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

嘗試了很多東西,但添加'HIDE_IMPLICIT_ONLY'爲我帶來了不同。 – kaka

相關問題