0

Я хочу использовать Theme.Material для всего устройства с API21 и выше и поддерживать совместимость с устройствами pre API21. Я следую инструкциям, описанным here, и создал 2 Style.xml. Это один для API21 и выше Используйте Theme.Material для API21 и выше и поддерживайте совместимость в Activity с помощью панели инструментов

<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 и выше, я понимаю, что я должен расширяет активность (см What causes android exception "You need to use a Theme.AppCompat theme (or descendant) with this activity.") ...

Кроме того, если я продлить активность Как я могу установить панель инструментов? Я использую setSupportActionBar в AppCompatActivity.

ответ

0

спользование 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> 
+1

Я понимаю, что тема android: Theme.Material (http://developer.android.com/) training/material/theme.html) в настоящее время широко не используется. Для целей совместимости лучше использовать AppCompat, а AppCompat предоставляет все возможности Theme.Material. – arover

+0

Да. AppCompat обертывает тему материала для api <21 и использует материальную тему для api21 +. –