如何在没有支持库的情况下将 MaterialToolbar 设置为 ActionBar

Posted

技术标签:

【中文标题】如何在没有支持库的情况下将 MaterialToolbar 设置为 ActionBar【英文标题】:How to set MaterialToolbar as ActionBar without support libraries 【发布时间】:2021-01-31 22:46:22 【问题描述】:

有没有办法将MaterialToolbar 设置为ActivityActionBar?每当我尝试设置我的设置时,android Studio 都会不断从支持库中请求Toolbar

必需:工具栏? - 找到:MaterialToolbar

XML

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.appbar.AppBarLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_
    android:id="@+id/myAppBarLayout">

    <com.google.android.material.appbar.CollapsingToolbarLayout
        android:id="@+id/myCollapsingToolbarLayout"
        android:layout_
        android:layout_
        android:fitsSystemWindows="true"
        app:layout_scrollFlags="scroll|snap|exitUntilCollapsed">

        <com.google.android.material.appbar.MaterialToolbar
            android:id="@+id/myToolbar"
            android:layout_
            android:layout_
            app:contentInsetStartWithNavigation="0dp"
            app:layout_collapseMode="pin" />
    </com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>

科特林

class MainActivity : Activity() 
    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.collapsingtoolbar_and_recyclerview)

        val mCoordinatorLayout = findViewById<CoordinatorLayout>(R.id.myCoordinatorLayout)
        val mCollapsingToolbarLayout = findViewById<CollapsingToolbarLayout>(R.id.myCollapsingToolbarLayout)
        val mToolbar = findViewById<MaterialToolbar>(R.id.myToolbar)

        // ...Do other stuff here
        setActionBar(mCollapsingToolbarLayout)
        mCollapsingToolbarLayout.title = "Hello, world!"
    

【问题讨论】:

【参考方案1】:

setActionBar() 需要一个框架 ToolbarMaterialToolbar 正确扩展了AndroidX Toolbar,这意味着您必须使用AppCompatActivitysetSupportActionBar() 而不是ActivitysetActionBar()

class MainActivity : AppCompatActivity() 

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.collapsingtoolbar_and_recyclerview)

        //[...]
        val toolbar = findViewById<MaterialToolbar>(R.id.myToolbar)
        setSupportActionBar(toolbar)

        // ...Do other stuff here
        supportActionBar.title = "My MainActivity"
        supportActionBar.setDisplayHomeAsUpEnabled(true)
    

【讨论】:

如果尝试将我的项目移至 Material Design Components,那可不太理想。 API 29 是我的项目最低要求。 您已经将 AppCompat 作为依赖项引入,Material 主题已经从 AppCompat 主题等扩展,等等。您还会发现 ~all of Architecture Components 和基本上,现代 Android 的任何其他构建块都要求您使用基本 Activity 类以外的其他东西 - 通过将 minSdkVersion 设置为 29,您不会得到任何东西将你的 minSdkVersion 设置为 24 甚至 21。 我根本没有使用该依赖项 + 我不需要支持旧版本的 Android。 AppCompat 是 Material Design Components 的传递依赖,所以如果你使用 Material Design Components,你就是在使用它。无论您是否支持旧版本的 Android,~您在现代 Android 开发中使用的推荐工具都没有以任何有意义的方式与 Android 框架绑定。 那么 AppCompat 是否应该用于我创建的所有活动?如果我不使用 AppCompat 依赖项会怎样?

以上是关于如何在没有支持库的情况下将 MaterialToolbar 设置为 ActionBar的主要内容,如果未能解决你的问题,请参考以下文章

如何在不带整个库的情况下将场景或影片剪辑导出为 SWF?

如何在不使用存储库的情况下将Docker镜像从一个主机复制到另一个主机

在没有证书的情况下将 iPhone 应用程序侧加载到设备

在不访问库的情况下将整数转换为字符串

如何在不包含所有spring-boot库的情况下将spring-boot应用程序部署到nexus?

Django:如何在没有''的情况下将数组传输到javascript?