关于ActionBar,工具栏和菜单图标的问题

问题描述 投票:0回答:1

使用android:theme="@style/AppTheme.NoActionBar"设置选项卡式活动

在AppBarLayout内部,有应用程序标题和右边的一些空间。 Xml文件在下面。

如何在菜单标题附近的空白处添加菜单项? (问题1)

将样式更改为android:theme="@style/AppTheme"(以便再次显示ActionBar)并删除了标题TextView。出现了菜单项和图标,但操作栏看起来不那么平滑,因为操作栏下方有阴影,使其看起来与选项卡分开。

因此,尝试通过在MainActivity的actionBar!!.setBackgroundDrawable(...)中使用onCreate()更改背景来消除色差,但出现空指针异常。 actionBar是否未初始化?我应该在哪里或如何调用此代码? (问题2)

[也尝试在xml文件中用<Toolbar>...</Toolbar>包围空白区域,以便我可以将Title放置在此工具栏中,并使用下面的代码将其定义为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>

奖金:如果我在AppBarLayout中放置ConstraintLayout并将clickListener设置到菜单图标的图像视图上,它会比ActionBar的onOptionsItemSelected更快吗?如果可以,速度如何? (问题3)

P.S。不要期望每个人都是专家。如果每个人都是专家,那么您在该站点上正在做什么? Google并非在所有情况下都回答。请记住,每个人也没有时间花大量时间进行搜索或尝试。有时剩下的唯一选择就是询问。如果您有负担回答的负担,为什么不只为专家建立自己的社区呢? (截至2020年3月的问题3.6)

EDIT:在activity_main.xml中使用AndroidX工具栏(<androidx.appcompat.widget.Toolbar>)对我有用。似乎setSupportActionBar()需要AndroidX工具栏,并且无法将简单的工具栏强制转换为它。

android kotlin android-actionbar android-toolbar android-tabbed-activity
1个回答
0
投票
  1. 将工具栏放入appbar内:
   <appbar>
     <toolbar>
     ....
     </toolbar>
   </appbar>

然后将工具栏设置为操作栏,然后在onCreateOptionsMenu中增加菜单:

setSupportActionBar(toolbar)

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.menu, menu)
        return true
}
  1. 应该是'getSupportActionBar()'而不是'getActionBar()'
  2. 不知道它是否更快,但是对于工具栏内的操作,最好使用“菜单”方法imo
© www.soinside.com 2019 - 2024. All rights reserved.