【问题标题】:What is a theme and how do I know if I have the "correct" one?什么是主题,我怎么知道我是否有“正确”的主题?
【发布时间】:2016-12-02 19:49:54
【问题描述】:

在我当前的项目中,当我在 Android Studio 2.2.2 中为特定布局选择“设计”选项卡时,我收到一条错误消息,提示

缺少样式。是否为此布局选择了正确的主题?

它接着说

在当前主题中找不到样式“textEditSuggestionItemLayout” (未显示 42 个类似错误)

但是,实际布局在设计器中和运行时呈现正常。

还有很多其他的 S.O.关于此的帖子,例如herehere,大多数答案似乎都涉及清除缓存并重新启动Android Studio,或者从下拉列表中选择不同的主题。我尝试了第一个,但没有帮助。我还没有尝试过第二个,因为我真的不明白什么是主题。

问题:

  1. 该错误意味着主题本身存在错误。什么 吗?主题文件是我项目的一部分吗,即它是一个 我应该创建,编辑,然后构建和交付 作为我的 APK 的一部分,还是仅在开发者 IDE 中使用?
  2. 如果我从下拉列表中选择不同的主题,我如何知道 “正确”的是?
  3. 既然我的项目可以按原样构建和运行,我可以忽略这些吗 错误?换句话说,我的代码中有这些错误还是只是一个 开发环境有问题?

编辑:回复 cmets 后的一些附加信息,如下:

我的清单中唯一使用字符串“主题”的地方是

  android:theme="@style/Theme.FullScreen"

... 而 FullScreen 是下拉菜单中指定的主题。

我在我的项目中搜索了字符串“textEditSuggestionItemLayout”,Android Studio 没有找到它。

【问题讨论】:

  • 你确定它说的是textEditSuggestionItemlayout而不是textEditSuggestionItemLayout吗? (大写Lstackoverflow.com/a/37798090/2308683
  • 它使用了大写的“L”,这就是我搜索的内容。我已经解决了,上面

标签: android android-studio


【解决方案1】:

如果您最近更新了 AS 或其任何组件,请尝试“使缓存无效并重新启动”。

否则,请尝试从“设计”选项卡中选择 AppTheme 或将其从默认选项更改为 AppTheme。在styles.xml 中选择符合您父应用主题的那个。

错误的原因可能是 IDE 出现故障,也可能是选择了 styles.xml 中未提及的主题(很可能)。

【讨论】:

  • 正如我在 OP 中所说,我已经尝试过使缓存无效并重新启动。正如我所说,我不想在不了解更多主题是什么的情况下尝试选择另一个主题。
  • @user316117 发生该错误的主要原因是AppTheme 与您在布局中使用的其他主题不匹配。尝试在整个应用程序中使用相同的主题。
【解决方案2】:

您可以在整个项目范围内搜索textEditSuggestionItemlayout,或者它声称错过的其他样式。

这些要么在您自己的 res/values/styles.xml 和/或 res/values/themes.xml 文件中,要么在 SDK 中提供,这就是为什么您会看到一些建议取消选中“自动选择最佳”和选择您已安装的版本。在某些情况下,最新 API 版本的渲染工具不起作用。

例如,如果您将样式设置为Theme.Holo,但您使用的是AppCompatActivity,则会出现渲染错误,您必须使用Theme.AppCompat(或后代)。这些主题可以从设计编辑器的下拉菜单中更改。

您可以在AndroidManifest.xml 中查看您的活动应用了哪些主题/样式。


res/values/styles.xml

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

AndroidManifest.xml

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

注意:android:theme=@style/


如果您仍然缺少主题,那么您可能缺少一些依赖项,例如

compile 'com.android.support:design:<your_version_here>' 

如果您的代码运行良好,那么当然可以忽略它,但我认为让布局设计器再次工作不应该被忽略。

【讨论】:

  • 但是我仍然不明白什么是主题,即使在阅读之后:(developer.android.com/guide/topics/ui/themes.html ...例如是否有默认主题?我需要指定主题?
  • 是的,该项目有一个默认主题。 res/values/styles.xml 是为 Manifest 中的应用程序创建和引用的。它也可以在活动级别被覆盖
  • 我还是不明白。您在哪里说“或者它们是在 SDK 中提供的,这就是为什么您会看到一些建议取消选中“自动选择最佳”并选择您已安装的版本。”这意味着我已经安装了一个主题。我没有明确安装主题。那么我如何分辨什么是“正确”的主题以及是什么使主题“不正确”?
  • 一个“不正确”的主题仅仅意味着在使用的主题中找不到该值。有 SDK 提供的默认主题(例如 Theme.Holo),还有依赖项提供的主题(Theme.AppCompat),以及您自己在 res/values/styles.xml 中的主题。
  • 我进行了搜索,但在我的项目中的任何地方都找不到“textEditSuggestionItemlayout”。因此,如果在使用的主题中找不到该字符串,正如您在上面解释的那样,并且它不在我的项目中,那么 Android Studio 从哪里获得它?
猜你喜欢
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 2018-07-03
  • 2019-09-05
  • 2011-02-27
  • 1970-01-01
  • 2011-04-03
相关资源
最近更新 更多