4

アクションバーには5つのアクションメニュー項目があり、次のようにアクションバーシャーロックライブラリを使用しています。

onCreateOptionsMenu()、私は次のコードを使用しました:

  menu.add(0,1,0 "Settings")
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

  menu.add(0,2,0 "Favorites")
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

  menu.add(0,3,0 "List")
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

  menu.add(0,4,0 "Upload")
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

  menu.add(0,5,0 "Search")
     .setActionView(R.layout.search_layout)
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

今私の問題は検索です編集テキスト(赤い色です)は次のように表示されます: 検索編集テキストは次のように表示されます

次のように、アクションバーで完全に表示したいと思います。

期待される出力

4

1 に答える 1

6

この質問は少し古いですが、とにかく答えようとします。誰かがそれを役に立つと思うことを願っています。

これが私がやったことです:

SearchView を拡張するカスタム SearchView クラスを作成します。2 つのイベントが定義されています。1 つは検索ビューが展開されたときに発生し、もう 1 つは折りたたまれたときに発生します。

public class EnglishVerbSearchView extends SearchView {

OnSearchViewCollapsedEventListener mSearchViewCollapsedEventListener;
OnSearchViewExpandedEventListener mOnSearchViewExpandedEventListener;

public EnglishVerbSearchView(Context context) {
    super(context);
}

@Override
public void onActionViewCollapsed() {
    if (mSearchViewCollapsedEventListener != null)
        mSearchViewCollapsedEventListener.onSearchViewCollapsed();
    super.onActionViewCollapsed();
}

@Override
public void onActionViewExpanded() {
    if (mOnSearchViewExpandedEventListener != null)
        mOnSearchViewExpandedEventListener.onSearchViewExpanded();
    super.onActionViewExpanded();
}

public interface OnSearchViewCollapsedEventListener {
    public void onSearchViewCollapsed();
}

public interface OnSearchViewExpandedEventListener {
    public void onSearchViewExpanded();
}

public void setOnSearchViewCollapsedEventListener(OnSearchViewCollapsedEventListener eventListener) {
    mSearchViewCollapsedEventListener = eventListener;
}

public void setOnSearchViewExpandedEventListener(OnSearchViewExpandedEventListener eventListener) {
    mOnSearchViewExpandedEventListener = eventListener;
}

}

私のアクティビティでは、次のことを行いました。 - メニューへの参照を格納するためのプライベート フィールドを作成しました。- メニューへの参照を使用して、他のアクションを非表示および表示する検索ビューを折りたたみおよび展開するためのイベントを定義しました。

public class DictionaryActivity extends ActionBarActivity {

    private Menu mMenu;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.dictionary, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    EnglishVerbSearchView searchView = (EnglishVerbSearchView) MenuItemCompat.getActionView(searchItem);        

    searchView.setOnSearchViewCollapsedEventListener(listenerCollapse);
    searchView.setOnSearchViewExpandedEventListener(listenerExpand);

    mMenu = menu;

    return super.onCreateOptionsMenu(menu);
}

final private OnSearchViewCollapsedEventListener listenerCollapse = new OnSearchViewCollapsedEventListener() {

    @Override
    public void onSearchViewCollapsed() {
        // show other actions
        MenuItem favouriteItem = mMenu.findItem(R.id.action_favourite);
        MenuItem playItem = mMenu.findItem(R.id.action_play);
        favouriteItem.setVisible(true);
        playItem.setVisible(true);

        // I'm doing my actual search here          
    }
};

final private OnSearchViewExpandedEventListener listenerExpand = new OnSearchViewExpandedEventListener() {

    @Override
    public void onSearchViewExpanded() {
        // hide other actions
        MenuItem favouriteItem = mMenu.findItem(R.id.action_favourite);
        MenuItem playItem = mMenu.findItem(R.id.action_play);
        favouriteItem.setVisible(false);
        playItem.setVisible(false);
    }
};

}

menu.xml ファイルでは、カスタム検索ビューを使用しました。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
      android:title="@string/action_search"
      android:icon="@drawable/action_search"
      yourapp:showAsAction="always|collapseActionView"
      yourapp:actionViewClass="com.xxx.EnglishVerbSearchView" />
</menu>

アクティビティの完全なコードからの抜粋にすぎないので、これで十分だと思います。足りないものがあれば教えてください。


arne.jans からのコメントによると:

MenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);用のスペースを作るには十分なようですSearchView。利点は次のとおりです。他のメニュー項目はオーバーフロー メニューに入り、開いている場合でも引き続きアクセスできますSearchView

于 2013-09-06T02:00:15.827 に答える