【问题标题】:Error in changing theme in android studio在android studio中更改主题时出错
【发布时间】:2016-02-03 07:13:05
【问题描述】:

我的简单应用程序出现问题。我正在关注android网站上的教程。有一部分他们使用 Holo Light 作为主题。但我的问题是当我选择这个主题时出现错误。我还查看了这个topic 并尝试了一些方法,但仍然遇到同样的错误。

这是我的错误:

java.lang.IllegalArgumentException: 你需要使用 Theme.AppCompat 设计库的主题(或后代)。 在 android.support.design.widget.ThemeUtils.checkAppCompatTheme(ThemeUtils.java:34) 在 android.support.design.widget.CoordinatorLayout.(CoordinatorLayout.java:178) 在 android.support.design.widget.CoordinatorLayout.(CoordinatorLayout.java:172) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:422) 在 org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:458) 在 org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:170) 在 org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:103) 在 com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:168) 在 android.view.BridgeInflater.loadCustomView(BridgeInflater.java:247) 在 android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:171) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:492) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:394) 在 com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:223) 在 com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:426) 在 com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350) 在 com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:510) 在 com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:498) 在 com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:888) 在 com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:498) 在 com.android.tools.idea.rendering.RenderTask.access$600(RenderTask.java:72) 在 com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:610) 在 com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:607) 在 com.android.tools.idea.rendering.RenderService.runRenderAction(RenderService.java:362) 在 com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:607) 在 com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:629) 在 com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel$6.run(AndroidDesignerEditorPanel.java:480) 在 com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320) 在 com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310) 在 com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254) 在 com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269) 在 com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227) 在 com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217) 在 com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238) 在 com.intellij.util.Alarm$Request$1.run(Alarm.java:351) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

这是我的文件:

styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

</resources>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.flax.myfirstapp">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MyActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".DisplayMessageActivity"
            android:label="@string/title_activity_display_message"
            android:parentActivityName=".MyActivity"
            android:theme="@style/AppTheme.NoActionBar">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.flax.myfirstapp.MyActivity" />
        </activity>
    </application>

</manifest>

MyActivity.java

package com.flax.myfirstapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Intent;
import android.widget.EditText;

public class MyActivity extends AppCompatActivity {
......

你能帮我解决这个问题吗?我是 Android 开发的新手。从昨天开始我就被这个错误困住了。 :(

这是我的文件结构的图像以及错误:

【问题讨论】:

  • 安卓工作室的版本?
  • 我使用的是 Android Studio 1.5.1

标签: android android-studio


【解决方案1】:

改变

<style name="AppTheme.NoActionBar">

<style name="Theme.AppCompat.Light.NoActionBar"> 

并设置它

android:theme="@style/Theme.AppCompat.Light.NoActionBar"

【讨论】:

  • 完美答案#鹰眼
  • 谢谢,我修改了清单和样式。但我仍然得到同样的错误。我还尝试更改 API 类型。目前我正在使用 API 23。
  • 你在哪里改变了这个? style.xmlvaluesvalues-v23 下?
  • 我没有values-23,但我有两种样式。在styles.xml下有styles.xmlstyles.xml(2)我会附上我的文件结构的图片。
  • 在两个地方进行更改
【解决方案2】:

我也有同样的问题:

由于您的项目似乎是具有默认配置的新项目,并且您已经拥有:

<style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

还有:

android:theme="@style/AppTheme.NoActionBar">

在您的Manifest 中,这似乎是 Android Studio 的错误或问题,我希望它会尽快修复。

但是使用我们的代码,一切正常,没问题,我会将此报告给 Google

还有一件事,因为 layout 来自 main_layout.xml 的这一行:

<include layout="@layout/content_main" />

这应该是原因,但是,我已经尝试过同样的问题。

但是,目前,如果您需要设计 Layout,您可能需要将 Android Studio's PreviewTheme 更改为带有 DarkActionbarLight

或者把主题改成AppTheme,像这样:

那么它应该可以工作了。

【讨论】:

  • 感谢您的解释。我只能使用AppTheme 进行预览。每当我尝试不同的主题时,我总是会遇到这些错误。
  • 是的,因为它是一个Layout,它来自main_content.xml,而且它没有任何样式,我们需要在主布局中添加一个类似这种情况的继承
  • 好的,谢谢您的信息。也许我应该暂时停止学习,直到这个错误得到修复。如果您找到了一些解决方案,请将链接发送给我。谢谢。 :)
  • 我也会尝试寻找一些解决方案。 :)
  • 嗯,这些都是正常的,那是因为它只是一个来自主布局的布局,你甚至可以在主布局中使用该布局而不会出现这些错误:) 通过删除这一行并设计你自己的布局(不推荐,也不需要停下来:)) : &lt;include layout="@layout/content_main" /&gt;
猜你喜欢
  • 2016-06-08
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多