【问题标题】:How to correctly use Material theme?如何正确使用 Material 主题?
【发布时间】:2016-04-10 20:28:05
【问题描述】:

我正在使用minSdkVersion=21 开发一个应用程序。我不希望支持 21 岁以下的旧 API。

Project structure > Dependecies,我仍然可以看到附加的v7 支持库。这背后的原因是什么?

Material 主题应用于API 21 设备的正确方法是什么,因为由于Coordinator layout 的膨胀,我不断收到错误,或者它告诉我使用Theme.AppCompat 的主题而不是android:Theme.Material.Light.DarkActionBar

(一些属性被忽略了)

Manifest.xml

<application
    android:theme="@android:style/Theme.Material.Light.DarkActionBar">
    <activity
        android:name=".MainActivity"
        android:theme="@android:style/Theme.Material.Light.DarkActionBar">
    </activity>
</application>

值\styles.xml

<style name="AppTheme" parent="android:Theme.Material.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" />

v21\styles.xml

<resources>
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
   <!-- item tags here -->
</style>
</resources>

build.gradle

compileSdkVersion 23
buildToolsVersion "23.0.2"

defaultConfig {
    applicationId "com.app.karti.themetestv3"
    minSdkVersion 21
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}

现在,我在这里遇到了 2 个例外: 1.Error inflating class android.support.design.widget.CoordinatorLayout 2.You need to use a Theme.AppCompat theme (or descendant) with the design library.

如果有人可以提供帮助,我会很高兴。谢谢。

PS : MainActivity 类扩展 Activity 而不是 AppCompatActivity

【问题讨论】:

  • 请同时粘贴您的 build.gradle 文件。
  • AppCompat 主题在 21+ 上使用 Material 主题。

标签: android android-studio material-design android-support-library android-appcompat


【解决方案1】:

这背后的原因是什么?

因为要么您自己添加了它,要么您使用了添加它的模板。例如,IDE 附带的 Android Studio new-project 和 new-activity 向导模板都使用appcompat-v7

将 Material 主题应用于 API 21 设备的正确方法是什么,因为由于协调器布局的膨胀,我不断收到错误,或者它告诉我使用 Theme.AppCompat 中的主题而不是 android:Theme.Material.Light.DarkActionBar .

您不能使用 CoordinatorLayout 或 Android 设计支持库中的任何内容,除非您还使用 appcompat-v7 以及所有相关内容(例如,更改主题,使用 AppCompatActivity)。

所以,你的选择是:

  1. 避免使用appcompat-v7,不要管你的活动和其他东西,但不要使用CoordinatorLayout,或者

  2. 使用appcompat-v7,或

  3. 避免使用appcompat-v7,不理会您的活动和内容,并尝试跨端口CoordinatorLayout 以及您想从Android 设计支持库中使用的任何其他内容,以不使用appcompat-v7

我没有尝试过交叉移植CoordinatorLayout。跨端口ActionBarDrawerToggle 进行得很顺利。交叉移植Snackbar 看起来很痛苦,所以我使用了一个与appcompat-v7 无关的开源。

【讨论】:

  • 好吧,用RelativeLayoutLinearLayout 等其他布局替换CoordinatorLayout 暂时解决了这个问题。正如你提到的,我需要更多地了解交叉移植。谢谢。
  • @fireboy91:CoordinatorLayout 主要用于内容需要对其他地方的事件做出反应的特殊场景,例如 FAB 向上滑动为 Snackbar 腾出空间。根据您创建的 UI,您可能永远不需要 CoordinatorLayout
猜你喜欢
  • 2019-03-11
  • 1970-01-01
  • 2015-07-11
  • 2022-12-11
  • 2020-03-27
  • 2019-07-15
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多