Панель действий, толкающая панель инструментов вниз

В моем приложении я использую панель инструментов, как описано в официальной документации (библиотека поддержки app7 v7, Theme.Appcompat.Light.NoActionBar, android.support.v7.widget.Toolbar, setSupportActionBar (myToolbar)): http://developer.android.com/training/appbar/index.html

У меня есть ExpandableListView, и я хотел бы реализовать режим контекстного действия, когда я долго нажимаю на элемент. Для достижения этого я использую: setMultiChoiceModeListener(new MultiChoiceModeListener()). Таким образом, однако, строка режима действия отображается в верхней части экрана, нажимая на панель инструментов (я думаю, это потому, что система использует обычный режим действия, а не режим поддержки действий). Я хочу, чтобы он отображался на панели инструментов.

Я пробовал это решение: windowActionBarOverlay = true, но оно не работает.

3 ответа

У меня тоже была эта проблема.
Решение, которое вы пробовали, было немного неуместным.

Вместо того<item name="windowActionBarOverlay">true</item>

попробуйте установить <item name="windowActionModeOverlay">true</item>

в теме вашего приложения. При этом панель режима действий будет наложена поверх панели инструментов по желанию.

Вы можете использовать этот код в своем адаптере

 public boolean multiSelect = false;
private ArrayList<String> selectedItems = new ArrayList<>();
ActionMode modee;
private ActionMode.Callback actionModeCallbacks = new ActionMode.Callback() {
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        multiSelect = true;
        menu.add("Delete");
        modee=mode;
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        for (int i = 0; i < selectedItems.size(); i++) {
            for (int j = 0; j < sizeOfdata; j++) {
                if (data.get(j).getFull_name() == selectedItems.get(i)) {
                    data.remove(j);
                    deleteContact(selectedItems.get(i));
                     //or your code 
                    break;
                } else {
                    // continue;
                }
            }
        }
        mode.finish();
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        multiSelect = false;
        selectedItems.clear();
        notifyDataSetChanged();
    }
};

Это сработало для меня... Если вы используете настраиваемую панель инструментов, вместо удаления панели инструментов по умолчанию из манифеста с помощью пытаться

       <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">  
   <item name="windowActionBarOverlay">true</item>
 </style> 

в стилях и удалите этот код из файла манифеста.

Другие вопросы по тегам