Я работаю над использованием новой панели инструментов, которая была представлена в Lollipop и библиотеке AppCompat-v7. Я следовал этому руководству по настройке панели инструментов. Я заметил, что когда вы вызываете что-то, что вызывает контекстную панель действий (например, выделение текста для копирования / вставки), она толкает панель инструментов вниз на странице. Вы можете видеть то, о чем я говорю на картинке внизу страницы:
Итак, по сути, я настроил это так. У меня есть панель инструментов, определенная в XML-файле, который я использую с тегами включения:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"/>
Затем я создаю это на мой взгляд:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/root"
tools:context=".MainActivity">
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- Rest of view -->
</LinearLayout>
В коде я настроил это так:
// On Create method of activity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Кто-нибудь знает, как сделать так, чтобы Contextual ActionBar вышел поверх панели инструментов?
Ответы:
Обновить:
Решение: используйте свойство windowActionModeOverlay . Установите это в вашей теме:
и режим действия будет отображаться над панелью действий вместо нажатия на нее вниз. (Если вы не используете последнюю версию AppCompat, вам нужно добавить к свойству префикс «android:»). Это в основном позволяет AppCompat знать, что у вас есть панель инструментов, расположенная в верхней части экрана, и что он должен рисовать ActionMode поверх нее.
Старый ответ / обходной путь:
Я столкнулся с той же проблемой. Независимо от того, какую тему я установил, она всегда сдвигает панель инструментов, которую я установил как ActionBar. Я пытался с и без поддержки библиотеки, но это не имело значения.
К сожалению, я не смог это исправить, поэтому вместо этого я нашел обходной путь. В моих
ActionModeCallback
«SonCreateActionMode
я скрыть панель действий:и
onDestroyActionMode
я покажу это снова:Скрытие / отображение происходит так быстро, что это не заметно на моих тестовых устройствах. Есть, конечно, и обратная сторона: хотя анимация ввода все еще работает, анимация выхода контекстной панели действий теряется, потому что панель инструментов сразу же появляется над ней. Но пока мы не найдем лучшее решение, я думаю, что мы застряли с этим.
(Моя активность фактически расширяет пользовательский
BaseActivity
класс, у которого есть метод, вызванныйgetActionBarToolbar()
из исходного кода приложения Google I / O 2014 , поэтому я могу легко получить панель инструментов:Жаль, что приложение ввода-вывода не использует контекстную панель действий.)
источник
Не запускайте его на своей деятельности, но на панели инструментов. В вашей деятельности:
и вы должны использовать
источник
AppCompatActivity.startSupportActionMode(callback)
, чтобы получить совместимость с атрибутами, какapp:iconTint
в пункте меню xmls.Просто небольшое дополнение: для
Для работы важно звонитьsuper.onCreate(savedInstanceState)
ДО вызоваsetContentView(R.layout.your_activity)
в вашей деятельности. Это действительно имеет значение в этом случае!источник
В моем случае,
<item name="windowActionModeOverlay">true</item>
не работает, но эта работа:<item name="android:windowActionModeOverlay">true</item>
, тоandroid
есть ключ.источник
<item name="windowActionModeOverlay">true</item>
панель инструментов appcompat, в противном случае вы используетеandroid
пространство имен.Решение Джейкоба работало для меня, но контекстный ActionBar был прозрачным, и панель инструментов была видна через него. Это может быть решено следующим образом:
Тема «AppTheme.Base» должна быть той, которая применяется к панели инструментов.
Подробнее о контекстной стилизации ActionBar:
Как настроить контекстную панель действий, используя appCompat в дизайне материала
источник
Очень полезный способ вывести панель инструментов вперед
toolbar.bringToFront()
источник
View.bringToFront()
это очень тяжелая операция и, как правило, следует избегать любой ценой.Еще одно небольшое дополнение: убедитесь, что в активности задано хотя бы пустой экран,
setContentView(R.layout.empty_screen)
если вы загружаете весь пользовательский интерфейс фрагментами (ft.replace(android.R.id.content, fragment)
).источник