0

私はActionBarSherlockライブラリを使用して、ハニカム以前のバージョンでアクションバーを取得しています。アクションバー メニューが xml の下から膨張するアクティビティがあります。

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"            
    />

メニュー項目の Expand イベントと Collapse イベントをリッスンする 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ありました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か?

いくつかの調査の後、CollapseActionView を表示したままにしておきたいと考えていたDownDropListので、これを見ると便利かもしれません: Back キーを押した後に AutoCompleteTextView の DropDownList が開かれましたか? . 念のため、これを見つけました:ソフトキーボードと「戻る」ボタンを備えたEditText

于 2013-12-11T12:28:13.507 に答える