Предположим, что вкладка активна с android:theme="@style/AppTheme.NoActionBar"
Внутри AppBarLayout есть название приложения и некоторое пространство справа. Файл Xml находится ниже.
Как добавить элементы меню в это пустое место рядом с заголовком? (Вопрос 1)
Изменен стиль на android:theme="@style/AppTheme"
(чтобы снова появился ActionBar) и удален заголовок TextView. Появились пункт меню и значки, но панель действий выглядела не так гладко, так как под панелью действий есть затенение, из-за чего она выглядит отдельно от вкладок.
Итак, попытались устранить разницу в цвете, изменив фон с помощью actionBar!!.setBackgroundDrawable(...)
внутри onCreate()
MainActivity, но получено исключение нулевого указателя. Был ли инициализирован actionBar? Где или как я должен назвать этот код? (Вопрос 2)
Также попытался обернуть пустую область с помощью <Toolbar>...</Toolbar>
внутри xml файла, чтобы я мог поместить Заголовок внутри этой Панели инструментов и определить его как actionBar с кодом ниже, но значки меню все же сделали не появляется (onCreateOptionsMenu
переопределяется внутри MainActivity):
val actionbar = toolBar // possible to skip findViewById
setSupportActionBar(actionbar)
.
.
.
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.mainmenu, menu)
return super.onCreateOptionsMenu(menu)
}
Вот макет для активности с вкладками.
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
android:id="@+id/appBarMain">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="8dp"
android:text="@string/app_name"
android:textAppearance="@style/TextAppearance.Widget.AppCompat.Toolbar.Title" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="36dp"
android:background="?attr/colorPrimary">
<com.google.android.material.tabs.TabItem
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="TEXT1" />
<com.google.android.material.tabs.TabItem
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="TEXT2"/>
<com.google.android.material.tabs.TabItem
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="TEXT3"/>
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Бонус: если я помещаю ConstraintLayout внутри AppBarLayout и устанавливаю clickListener на изображениях значков меню, это будет быстрее, чем ActionBar's onOptionsItemSelected
? Если да, то как быстрее? (Вопрос 3)
PS Не ожидайте, что все будут экспертами. Если все были экспертами, что вы делаете на этом сайте? Google не отвечает в любых условиях. Имейте в виду, что каждый не может позволить себе роскошь часами искать или пробовать вещи. Иногда единственный оставшийся вариант - спросить. Если вы чувствуете бремя ответа, почему бы вам не создать собственное сообщество только для экспертов? (Вопрос 3.6 по состоянию на март 2020 года)
РЕДАКТИРОВАТЬ : Использование панели инструментов AndroidX (<androidx.appcompat.widget.Toolbar>
) в Activity_main. xml мне помогло. Похоже, для setSupportActionBar()
требуется панель инструментов AndroidX, и в нее нельзя вставить простую панель инструментов.