在API21及以上版本中使用Theme.Material,并在活动中保持与工具栏的兼容性。

问题描述 投票:1回答:1

我想在所有API21及以上的设备上使用Theme.Material,并保持与API21之前设备的兼容性。我遵循了以下指引 此处 并创建了2个Style.xml.这个是针对API21及以上的。

<style name="AppTheme" parent="android:Theme.Material">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="colorPrimary">@color/USMABlue</item>
    <item name="colorPrimaryDark">@color/USMABlueDark</item>

    <!-- Customize your theme here. -->
</style>

而这个则是针对API21之前的设备

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/USMABlue</item>
    <item name="colorPrimaryDark">@color/USMABlueDark</item>
    <item name="colorAccent">@color/USMAAccent</item>

    <!-- Customize your theme here. -->
</style>

我的问题是我的MainActivity应该扩展什么类。为了在API21之前的设备上工作,我的MainActivity扩展了AppCompatActivity,但是对于API21及以上的设备,我理解我应该扩展Activity(参见 "活动")。是什么原因导致了android异常 "你需要在这个活动中使用一个Theme.AppCompat主题(或子代)"。)...

此外,如果我扩展Activity,我如何设置我的工具栏?我在AppCompatActivity中使用setSupportActionBar。

android material-design android-support-library android-toolbar android-appcompat
1个回答
1
投票

使用一个 AppCompatActivity 你可以使用相同的类和 一样的风格 所有设备。

values/styles.xml

<style name="Base.AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/USMABlue</item>
    <item name="colorPrimaryDark">@color/USMABlueDark</item>
    <item name="colorAccent">@color/USMAAccent</item>

    <!-- Customize your theme here. -->
</style>

<style name="AppTheme" parent="Base.AppTheme">
</style>

只需添加一些attrs在 values-v21/styles.xml (不是必须的)。

<style name="AppTheme" parent="Base.AppTheme">
   <item name="android:windowDrawsSystemBarBackgrounds">true</item>
   <item name="android:statusBarColor">@android:color/transparent</item>
</style>
© www.soinside.com 2019 - 2024. All rights reserved.