我尝试了此 link 中的所有解决方案但它们都不适合我
Process: org.dmfs.tasks, PID: 12137 java.lang.RuntimeException: Unable
to start activity
ComponentInfo{org.dmfs.tasks/org.dmfs.tasks.Main.TimerActivity}:
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.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Caused by: 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.
at androidx.appcompat.app.AppCompatDelegateImpl.setSupportActionBar(AppCompatDelegateImpl.java:408)
at androidx.appcompat.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:150)
at org.dmfs.tasks.Main.TimerActivity.onCreate(TimerActivity.java:173)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.callActivityOnCreate(Instrumentation.java:1213)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
styles.xml 中的我的主题:
<style name="AppTheme" parent="Theme.MaterialComponents.NoActionBar">
<item name="colorPrimary">@color/white</item>
<item name="colorPrimaryVariant">@color/white</item>
<item name="colorOnPrimary">#000</item>
<item name="colorSecondary">@color/teal200</item>
<item name="colorSecondaryVariant">@color/teal300</item>
<item name="colorOnSecondary">@color/white</item>
<item name="android:colorBackground">@color/gray1000</item>
<item name="colorOnBackground">@color/white</item>
<item name="colorSurface">@color/black</item>
<item name="colorOnSurface">@color/white</item>
<item name="colorPrimaryDark">@color/white</item>
<item name="android:windowBackground">@color/black</item>
<item name="android:textColorPrimary">@android:color/black</item>
<item name="appBarColor">@color/black</item>
<item name="cardViewColor">@color/black</item>
<item name="alertDialogColor">@color/gray1000</item>
<item name="viewInflaterClass">androidx.appcompat.app.AppCompatViewInflater</item>
<item name="windowActionModeOverlay">true</item>
<item name="android:actionModeCloseDrawable">@drawable/ic_clear</item>
<item name="actionModeStyle">@style/ActionModeStyle</item>
<item name="alertDialogTheme">@style/DialogTheme</item>
<item name="palette">@array/lightPalette</item>
<item name="fontFamily">@font/app_font</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
我的 list 中的主题 Activity :
<activity
android:name="org.dmfs.tasks.Main.TimerActivity"
android:showOnLockScreen="true"
android:launchMode="singleTask"
android:theme="@style/AppTheme">
Activity 代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
ThemeHelper.setTheme(this);
ActivityMain3Binding binding = DataBindingUtil.setContentView(this, R.layout.activity_main3);
mBlackCover = binding.blackCover;
mToolbar = binding.bar;
mTimeLabel = binding.timeLabel;
mTutorialDot = binding.tutorialDot;
mBoundsView = binding.main;
mViewModel = ViewModelProviders.of(this).get(TimerActivityViewModel.class);
setupTimeLabelEvents();
setSupportActionBar(mToolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle(null);
}
此行产生错误:setSupportActionBar(mToolbar); 我想使用 Activity_main 中 ID 为“bar”的工具栏,而不是默认操作栏。我该如何解决这个问题?
注意:我没有这个错误,是我将android studio canary更新到3.6时突然产生的
最佳答案
我添加主题
<style name="AppTheme.NoActionBar" parent="AppTheme">
<item name="windowActionBar">false</item>
</style>
在 list 中添加此内容
<activity
android:name="org.dmfs.tasks.Main.TimerActivity"
android:showOnLockScreen="true"
android:launchMode="singleTask"
android:theme="@style/AppTheme.NoActionBar">
关于java - 该 Activity 已经有一个由窗口装饰提供的操作栏。更新android studio后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57976638/