Вопросы о ActionBar, Панели инструментов и значках меню - PullRequest
0 голосов
/ 02 марта 2020

Предположим, что вкладка активна с 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, и в нее нельзя вставить простую панель инструментов.

1 Ответ

0 голосов
/ 02 марта 2020
  1. Поместить панель инструментов внутри панели приложений:
   <appbar>
     <toolbar>
     ....
     </toolbar>
   </appbar>

, затем установить панель инструментов в качестве панели действий, а затем накачать меню в onCreateOptionsMenu:

setSupportActionBar(toolbar)

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.menu, menu)
        return true
}
это должно быть 'getSupportActionBar ()', а не 'getActionBar ()' не знаю, быстрее это или нет, но для действий внутри панели инструментов лучше использовать подход «меню», то есть imo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...