【问题标题】:How to set MaterialToolbar as ActionBar without support libraries如何在没有支持库的情况下将 MaterialToolbar 设置为 ActionBar
【发布时间】: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_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/myAppBarLayout">

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

        <com.google.android.material.appbar.MaterialToolbar
            android:id="@+id/myToolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            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!"
    }
}

【问题讨论】:

    标签: android kotlin android-activity android-actionbar android-toolbar


    【解决方案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 依赖项会怎样?
    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2020-09-19
    相关资源
    最近更新 更多