Android操作栏与主题崩溃

时间:2015-11-16 13:54:49

标签: android android-actionbar

我使用版本为23.1.0的Google支持库。

compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.android.support:recyclerview-v7:23.1.0'
compile 'com.android.support:cardview-v7:23.1.0'
compile 'com.android.support:preference-v7:23.1.0'
compile 'com.android.support:design:23.1.0'

我正在重复使用在引入材料设计之前使用支持库版本的主题文件。

<style name="AppTheme.StatusBarOverlay.Main" parent="@style/AppTheme.Main">
    <item name="android:windowContentOverlay">@null</item>
</style>
<style name="AppTheme.Main" parent="@style/AppBaseTheme.Main">
    <item name="windowActionBar">false</item>
</style>
<style name="AppBaseTheme.Main" parent="@style/Theme.AppCompat.Main">
    <item name="colorPrimary">@color/main_color</item>
    <item name="colorPrimaryDark">@color/main_color_dk</item>
</style>
<style name="Theme.AppCompat.Main" parent="@style/Base.Theme.AppCompat.Main" />
<style name="Base.Theme.AppCompat.Main" parent="@style/Base.V7.Theme.AppCompat" />
<style name="Theme.CustomDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@drawable/trans_draw</item>
    <item name="android:windowNoTitle">true</item>
</style>

我通过在清单

中设置主题让MainActivity使用了该样式
    <activity
        android:name=".activities.MainActivity"
        android:label="@string/title_activity_main"
        android:theme="@style/AppTheme.StatusBarOverlay.Main" >
    </activity>

检索操作栏时

ActionBar actionBar = getSupportActionBar();

引发了以下异常。

Caused by: java.lang.IllegalArgumentException: AppCompat does not support the current theme features: { windowActionBar: false, windowActionBarOverlay: false, android:windowIsFloating: false, windowActionModeOverlay: false, windowNoTitle: false }
            at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:423)
            at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:280)
            at android.support.v7.app.AppCompatDelegateImplV7.initWindowDecorActionBar(AppCompatDelegateImplV7.java:173)
            at android.support.v7.app.AppCompatDelegateImplBase.getSupportActionBar(AppCompatDelegateImplBase.java:89)
            at android.support.v7.app.AppCompatActivity.getSupportActionBar(AppCompatActivity.java:79)
            at com.dynamicwebapac.commerce.mobile.custom.CustomActivity.setupActionBar(CustomActivity.java:39)
            at com.dynamicwebapac.commerce.mobile.custom.CustomActivity.onCreate(CustomActivity.java:25)
            at com.dynamicwebapac.commerce.mobile.activities.MainActivity.onCreate(MainActivity.java:181)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

介绍材料设计后,Android支持库发生了什么变化?我该如何解决当前的问题?

2 个答案:

答案 0 :(得分:1)

使用新材料支持库,我们设置了像 styles.xml

这样的主题
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

同样在清单

android:theme="@style/AppTheme"

然后我们使用工具栏作为操作栏。在父布局中执行此操作

<android.support.v7.widget.Toolbar 
   android:id="@+id/toolbar"
   android:layout_width="match_parent"
   android:layout_height="?attr/actionBarSize"
   android:background="?attr/colorPrimary" />

我们使用

Java源中进行设置
Toolbar toolbar=(Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

答案 1 :(得分:0)

不要担心它会发生在我们大多数人身上。我想从这个问题的原因开始。

Material Design支持使用更灵活的Toolbar,...等因此AppCompat库提供的主题或样式没有ActionBar,或者你可以假设提供了支持ActionBar,因此需要禁用系统默认ActionBar

现在按照Colns Abt

的建议执行以下两个步骤中的任何一个步骤
  1. 在结尾添加NoActionBar

    之类的Theme.AppCompat.NoActionBar样式

    或者

  2. 在自定义style

    中添加以下行
    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
    
  3. 进一步遵循Colns Abt给出的步骤。