2015-09-18 2 views
3

Я пытаюсь научиться стилю своего приложения, используя файл styles.xml, и мне нужно разъяснить несколько вещей, чтобы понять это.Стиль Android, разница между уровнями api

  1. В пункте, в чем разница между настройкой android:actionbarstyle и просто actionbarstyle? Я знаю, что в этом конкретном случае я должен определить оба, но почему? А как насчет всех других случаев, например android:colorPrimary и только colorPrimary? В этом случае я получаю сообщение об ошибке, указывающее, что android:colorPrimary может использоваться только с минимальным уровнем API API 21. Так есть ли у кого-то хорошее объяснение того, что делает префикс android: и как он влияет на мое приложение?

  2. Есть ли ссылка на разные родительские стили, такие как parent="@style/Widget.AppCompat.Light.ActionBar и что они означают? Как найти список различных родительских стилей, доступных для определенного элемента, и что я могу «переопределить» в них? Прямо сейчас, это в основном угадывает с моей стороны ....

Как ссылка, я отправляю свой текущий файл styles.xml.

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <style name="AppTheme" parent="MyTheme"/> 

    <style name="MyTheme" parent="Theme.AppCompat.Light"> 
     <item name="actionBarTheme">@style/MyTheme.ActionBarTheme</item> 
     <item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item> 
     <item name="actionBarStyle">@style/MyTheme.ActionBarStyle</item> 

     <item name="colorPrimary">@color/my_green</item> 
     <item name="colorPrimaryDark">@color/my_forest</item> 
     <item name="colorAccent">@color/my_soil</item> 

     <item name="drawerArrowStyle">@style/MyTheme.DrawerArrowStyle</item> 

     <item name="android:actionOverflowButtonStyle">@style/MyTheme.OverFlow</item> 

     <item name="android:actionMenuTextColor">@color/white</item> 

     <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item> 
     <item name="android:homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item> 

     <item name="colorControlNormal">@color/my_green</item> 
     <item name="colorControlActivated">@color/my_forest</item> 
     <item name="colorControlHighlight">@color/my_deep_green</item> 
    </style> 

    <style name="MyTheme.ActionBarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar"> 
     <!-- This sets the BACK arrow to white. Otherwise it's black. Must be placed in the theme--> 
     <item name="colorControlNormal">@color/white</item> 
    </style> 

    <style name="MyTheme.ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar"> 
     <item name="android:background">@color/my_green</item> 
     <item name="background">@color/my_green</item> 
     <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item> 
     <item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item> 
     <item name="colorControlNormal">@color/white</item> 
    </style> 

    <style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 
     <item name="android:textColor">@color/white</item> 
    </style> 

    <style name="MyTheme.DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
     <item name="spinBars">true</item> 
     <item name="color">@color/white</item> 
    </style> 

    <style name="MyTheme.OverFlow" parent="Widget.AppCompat.ActionButton.Overflow"> 
     <item name="android:tint">@color/white</item> 
    </style> 
</resources> 

ответ

2

Я буду стараться изо всех сил, чтобы объяснить и сосредоточиться на:

<item name="colorPrimary">@color/my_green</item> 
<item name="colorPrimaryDark">@color/my_forest</item> 
<item name="colorAccent">@color/my_soil</item> 

Эти атрибуты регулярно доступны с уровня API 21. В общем, вы использовать атрибуты с «андроида» префиксом.

Если вы определяете все свои стили в файле styles.xml ваших значений, и если вы используете приложение compat, тогда вам нужны оба.

Без префикса атрибуты применяются для устройств pre L. т. е. приложение. Чтобы заставить его работать на устройствах L и выше, вам нужно снова указать атрибут с префиксом «android».

И чтобы получить другие стили Android, вы можете войти в них, например, вы входите в классы и реализации. Для Mac я нажимаю кнопку команды, а затем нажимаю мышью на определенный стиль.

+0

Хорошо, что это хороший основной пояснения. Это хорошая идея создать папку values-v21 и файл styles.xml, в который я помещаю все атрибуты без тега android: и все остальные в пределах обычного styles.xml? – Joakim

+0

В значениях-v21 вам нужно использовать его с префиксом, в стандартном нет (если это относится к App Compat related). В папке значений используйте «colorPrimary» и в папке «values-v21» используйте «android: colorPrimary». Но только если вам нужно переопределить некоторые атрибуты, я бы поставил что-то особенное в значениях-v21. –

Смежные вопросы