Как добавить действия в верхнюю часть разделенного ActionBar

Если Android ActionBar разделен на верхнюю и нижнюю части с помощью android:uiOptions="splitActionBarWhenNarrow" в Manifext.xml, есть ли способ заставить некоторые из действий отображаться в верхней части вместо того, чтобы все они были внизу?

Ответ 1

Да! Вы можете продолжать использовать android:uiOptions="splitActionBarWhenNarrow" в вашем манифесте .xml.

Вам также нужно установить:

// set the actionbar to use the custom view
getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);

//set the custom view to use
getActionBar().setCustomView(R.layout.custom_action_bar_top);

Где R.layout.custom_action_bar_top будет представление, в котором есть все кнопки, которые вы хотите отобразить в верхней панели действий.

Все элементы меню, которые вы хотите внизу, должны быть добавлены как обычно в методе onCreateOptionsMenu вашей деятельности.

Ответ 2

Нет стандартного способа сделать это. Тем не менее, пользовательский вид панели действий появится в верхней строке, поэтому вы можете просто использовать это. Вы потеряете часть дополнительных услуг (тосты при длительной печати), поэтому вам придется реализовать их самостоятельно. Тем не менее, вы используете ActionBarSherlock, все макеты и стили для обычной кнопки есть, поэтому вы можете просто использовать их.

Ответ 3

Я хотел бы повторить решение Дилана Уотсона, но с одним улучшением. Для тех, кто хотел бы сохранить заголовок и не заменять весь actionBar своим новым представлением, они используют getActionBar().setDisplayShowCustomEnabled(true), а не getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);, поскольку последний приведет к тому, что новое представление будет единственным видом, отображаемым на панели действий, Мой код:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = new SearchView(this);
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    getActionBar().setDisplayShowCustomEnabled(true);
    getActionBar().setCustomView(searchView, new ActionBar.LayoutParams(Gravity.RIGHT));
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}