Android Material Design 应用开发:Toolbar 冲突解决方案
Android Material Design 应用开发:Toolbar 冲突解决方案
在 Android 应用开发中使用 Material Design 的 Toolbar 时,可能会遇到以下错误信息:
java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
这个错误信息表明你的 Activity 已经存在一个由窗口装饰提供的 ActionBar,而你又试图使用 Toolbar 来代替它。
解决方案
有以下几种方法可以解决这个问题:
-
修改 AppTheme 父主题:
在
styles.xml文件中,将AppTheme的父主题改为Theme.AppCompat.Light,即将parent="Theme.AppCompat.Light.DarkActionBar"修改为parent="Theme.AppCompat.Light"。 -
设置
windowActionBar属性为false:在
styles.xml文件中,将AppTheme的parent主题中的windowActionBar属性设置为false,即添加<item name="windowActionBar">false</item>。 -
注释或删除
setSupportActionBar方法:在
MainActivity.kt文件中,将setSupportActionBar(binding.toolbar)注释掉或删除。
代码示例
styles.xml
<resources>
<string name="app_name">MaterialTest</string>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">@color/colorPrimary</item>
<item name="android:windowBackground">@color/colorPrimaryDark</item>
<item name="android:navigationBarColor">@color/colorPrimary</item>
</style>
</resources>
MainActivity.kt
package com.example.materialtest
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.materialtest.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// setSupportActionBar(binding.toolbar)
}
}
通过以上方法,就可以解决 Toolbar 冲突问题,并在你的 Android 应用中成功使用 Toolbar。
原文地址: https://www.cveoy.top/t/topic/qwtd 著作权归作者所有。请勿转载和采集!