2012-10-13 40 views
5

tôi đã sử dụng ActionBarSherlock để tạo ActionBar nó có một nút tìm kiếm hiển thị một AutoCompleteEditText (SHOW_AS_COLLAPSIBLE_ACTION_VIEW) Khi nút Search được nhấp, EditText được hiển thị, tôi muốn EditText để có được sự tập trung và do đó hiển thị bàn phím mềm, khi nó được mở rộng này là mãCách lấy nét và hiển thị bàn phím mềm khi EditText được hiển thị trên thanh hành động?

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

tôi đã cố gắng để thiết lập một OnFocusChangeListener trên EditText và hiển thị mềm Keboard nếu nó có tập trung, nhưng nó didnt làm việc:

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

Làm thế nào để làm điều này?

Trả lời

5

Tìm thấy các Giải pháp:

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

tại sao bạn cần phải đăng một Runnable ? –

4

Nếu bạn vẫn còn có vấn đề, vì vậy gọi phương thức sau đây

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

thay vì

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

Đã thử nhiều thứ, nhưng việc thêm 'HIDE_IMPLICIT_ONLY' tạo sự khác biệt cho tôi. – kaka

Các vấn đề liên quan