2012-04-07 27 views
0

我有一个AutoCompleteTextView作为Collabsible ActionItem,并且我希望键盘在它被展开和聚焦时显示。这是我在onCreateOptionsMenu(代码):Android:AutoCompleteTextView作为Collabsible ActionItem键盘未在焦点上显示

menu.add("Search") 
      .setIcon(R.drawable.ic_search) 
      .setActionView(R.layout.collapsible_edittext) 
      .setShowAsAction(
        MenuItem.SHOW_AS_ACTION_ALWAYS 
          | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 


    final MenuItem searchMenuItem = menu.getItem(0); 
    searchMenuItem.setOnActionExpandListener(new OnActionExpandListener() { 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) item 
        .getActionView(); 
      autoCompleteTextView 
        .setOnFocusChangeListener(new OnFocusChangeListener() { 

         @Override 
         public void onFocusChange(View v, boolean hasFocus) { 
          Log.d(TAG, "onFocusChange: " + hasFocus); 
          if (hasFocus) { 
           mInputManager.showSoftInput(v, 
             InputMethodManager.SHOW_FORCED); 
          } else { 
           mInputManager.hideSoftInputFromWindow(
             v.getWindowToken(), 0); 
          } 

         } 
        }); 
      autoCompleteTextView.requestFocus(); 
      return true; 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) item 
        .getActionView(); 

      autoCompleteTextView.clearFocus(); 
      autoCompleteTextView.setText(""); 
      return true; 
     } 
    }); 

当我在ActionItem单击第一次,没有keybord所示。在折叠后,然后单击该项目上的键盘显示。但是我希望在用户第一次点击操作项时显示键盘。 我正在使用ActionBarSherlock,如果重要的话。 那么为什么键盘在第一次扩展时没有显示?有任何想法吗?

回答

1

您是否尝试过手动将焦点设置为编辑文本并在onOptionsItemSelected方法中手动显示键盘?

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case MENU_SEARCH: 
     // select edittext here 
     // show keyboard here 
     return true; 

    } 
    return super.onOptionsItemSelected(item); 
} 

编辑:我发现这个代码从这里显示键盘:

https://code.google.com/p/android-batavierenrace/source/browse/trunk/BataApp/src/com/ut/bataapp/activities/TeamsActivity.java

我测试我的应用程序和它的作品...

public static void setKeyboardFocus(final EditText primaryTextField) { 
       (new Handler()).postDelayed(new Runnable() { 
         public void run() { 
           primaryTextField.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0)); 
           primaryTextField.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0)); 
         } 
       }, 100); 
     } 
+0

它的工作。 。 谢谢 – 2012-04-18 17:11:05

相关问题