【问题标题】:Android action bar crashes with themeAndroid 操作栏因主题而崩溃
【发布时间】:2015-11-17 01:09:57
【问题描述】:

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

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>

我通过在 ma​​nifest

中设置主题让我的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)

在引入 Material Design 之后,Android 支持库发生了什么变化?我该如何解决我目前的问题?

【问题讨论】:

  • falsetrue

标签: android android-actionbar


【解决方案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"

然后我们使用 Toolbar 作为操作栏。在您的父布局中执行此操作

<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);

【讨论】:

    【解决方案2】:

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

    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>
      

    进一步按照Colns Abt给出的步骤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 2016-04-23
      • 1970-01-01
      相关资源
      最近更新 更多