2013-02-25 128 views
0

我正在使用ActionBarSherlock库来获取预蜂窝版本上的操作栏。我有其动作条菜单从下面的XMLAndroid:ActionView折叠按回按钮

menu.xml文件充气活性

<menu xmlns:android="http://schemas.android.com/apk/res/android">   
    <item android:id="@+id/action_bar_search" 
     android:icon="@drawable/ic_search" 
     android:showAsAction="always|collapseActionView" android:title="Search" 
     android:actionLayout="@layout/layout_search">   
    </item> 
</menu> 

下面是actionLayout

> layout_search.xml

<?xml version="1.0" encoding="utf-8"?> 
    <AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/autoCompText_action_bar_search" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"  
    android:cursorVisible="true"  
    android:imeOptions="flagNoExtractUi" 
    android:inputType="text" 
    android:textColor="@color/color_action_bar_text" 
    android:textCursorDrawable="@android:color/black" 
    android:background="@drawable/textfield_bg_activated_holo_dark"    
    /> 

我还实施了OnActionExpandListener来收听展开和折叠 菜单项目的事件。下面是我实现OnActionExpandListener

private OnActionExpandListener searchActionExpandListener = new OnActionExpandListener() {   
      @Override 
      public boolean onMenuItemActionExpand(MenuItem item) {    

       /* This is done so that requestFocus() can popup the softkeyboard. 
       * Else, no softkeyboard is popped up 
       */ 
       edtTextSearch.post(new Runnable() { 
        @Override 
        public void run() { 
         edtTextSearch.requestFocus(); 
         mImm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
         mImm.showSoftInput(edtTextSearch, InputMethodManager.SHOW_IMPLICIT); 
        } 
       }); 
       return true; 
      } 
     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) {     
      mImm.hideSoftInputFromWindow(edtTextSearch.getWindowToken(), 0); 
      return true; 
     } 
    }; 

所以现在,在按压动作搜索按钮栏的actionLayout显示和softkeyboard被弹出,以及重点就可以了。所有工作都很好,直到现在但是当我按下后退键(手机上的硬键)时,操作视图会崩溃。我想要做的就是按下后退键隐藏软键盘(如果正在显示),而不是折叠操作视图。任何人都可以请帮我吗?

+0

您好Viren,你也应该看看我的答案类似的问题:[上下文ActionBar隐藏,当我点击硬件后退和键盘输出](http:///stackoverflow.com/a/23122941/2668136),它可能会帮助你。 – Fllo 2014-04-19 14:28:28

+0

感谢Filo的积极响应。您的链接给了我一个全新的视角 – Viren 2014-04-19 19:30:58

+0

很高兴帮助!这很奇怪,因为我从未在我的项目中看到过这种行为。我会做一些测试,以便知道我的错在哪里。无论如何,我希望这会帮助你。良好的编码。 – Fllo 2014-04-19 19:37:44

回答

0

我有一个ActionBarSherlockCollapseActionView类似的问题。你的代码对我有很大的帮助,但是我无法在早期版本(2. +)上弹出一个Runnable()(不知道为什么)。只是一个小窍门可以避免你用这样的方式,请参阅下面我的代码:

@Override 
public boolean onMenuItemActionExpand(MenuItem item) {    
    // Set the focus 
    edtTextSearch.requestFocus(); 
    // This force the Soft Keyboard to appear whatever the version used 
    mImm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 
            InputMethodManager.HIDE_IMPLICIT_ONLY); 
    return true; 
} 

这工作perferctly在2 +及以上。现在,对于你所要求的,我没有看到所有测试设备上的东西。当View扩展时,软键盘出现。然后,当我按下后退按钮时,软键盘消失,并且View不会折叠(即使在横向模式下)。如果我再按一次,这里View崩溃。
你能解释更多你想要什么吗?因为我没有正确地看到你的动作在后退按钮上以折叠View

经过一番研究,我在想你想让你的DownDropList可见与CollapseActionView,所以也许这将是有用的看看这个:DropDownList of AutoCompleteTextView opened after pressing the Back key?。以防万一,我发现这个:EditText with soft keyboard and “Back” button