0

我正在使用ActionBarSherlock库来获取预蜂窝版本的操作栏。我有一个活动,其操作栏菜单从 xml 下方膨胀

菜单.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

> 布局搜索.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,并且会弹出软键盘并关注它。到目前为止一切正常。但是当我按下返回键(手机上的硬键)时,动作视图就会崩溃。我要做的就是在按下后退键时隐藏软键盘(如果它正在显示)而不折叠动作视图。谁能帮帮我?

4

1 回答 1

0

ActionBarSherlock我对and a也有类似的问题CollapseActionView。您的代码对我帮助很大,但我无法在早期版本(如 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;
}  

这在 2.+ 及更高版本中完美运行。现在,根据您的要求,我没有在所有经过测试的设备上看到这些东西。当View展开时,出现软键盘。然后当我按下后退按钮时,软键盘消失并且View不会折叠(即使在横向模式下)。如果我再次按下它,这里就View崩溃了。
你能解释更多你想要什么,因为我看不到你在后退按钮上折叠的动作View吗?

经过一些研究,我在想你想DownDropList用 CollapseActionView 保持你的可见性,所以看看这个可能会很有用:AutoCompleteTextView 的 DropDownList 在按下后退键后打开?. 以防万一,我发现了这个:EditText with soft keyboard and “Back” button

于 2013-12-11T12:28:13.507 回答