1page.title=Обеспечение совместимости 2 3@jd:body 4 5<div id="tb-wrapper"> 6<div id="tb"> 7<h2>Содержание этого урока</h2> 8<ol> 9 <li><a href="#Theme">Определение альтернативных стилей</a></li> 10 <li><a href="#Layouts">Предоставление альтернативных макетов</a></li> 11 <li><a href="#SupportLib">Использование вспомогательной библиотеки</a></li> 12 <li><a href="#CheckVersion">Проверка версии системы</a></li> 13</ol> 14<h2>См. также</h2> 15<ul> 16 <li><a href="http://www.google.com/design/spec">Спецификация Material Design</a></li> 17 <li><a href="{@docRoot}design/material/index.html">Material Design в Android</a></li> 18</ul> 19</div> 20</div> 21 22 23<p>Некоторые возможности Material Design, такие как "материальные" темы и настраиваемые переходы между операциями, 24 доступны только в Android 5.0 (уровень API 21) и более поздних версиях. Однако приложения можно разработать таким образом, 25чтобы эти функции были доступны при запуске на устройствах, поддерживающих Material Design, сохранив при этом 26совместимость приложений с устройствами под управлением более ранних выпусков Android.</p> 27 28 29<h2 id="Theme">Определение альтернативных стилей</h2> 30 31<p>Приложение можно настроить так, чтобы тема Material Design использовалась при работе на поддерживающих эту технологию устройствах, 32а при запуске приложения на устройствах с более ранними версиями Android происходило переключение на старые варианты тем. Ниже описан порядок такой настройки.</p> 33 34<ol> 35<li>В файле 36<code>res/values/styles.xml</code> определите тему, наследующую более старой теме (например, Holo).</li> 37<li>В файле 38<code>res/values-v21/styles.xml</code> определите тему с таким же именем, наследующую теме Material Design.</li> 39<li>В файле манифеста укажите эту тему как тему приложения.</li> 40</ol> 41 42<p class="note"><strong>Примечание.</strong> 43Если в приложении используется тема Material Design, но отсутствует определенная описанным способом альтернативная тема, 44это приложение не будет запускаться на устройствах под управлением версий Android, предшествующих 5.0. 45</p> 46 47 48<h2 id="Layouts">Предоставление альтернативных макетов</h2> 49 50<p>Если в создаваемых согласно рекомендациям Material Design макетах отсутствуют новые 51атрибуты XML, представленные в Android 5.0 (уровень API 21), 52такие макеты поддерживаются в предыдущих версиях ОС Android. В противном случае необходимо предоставить альтернативные макеты. Можно также предоставить 53альтернативные макеты для настройки внешнего вида приложения в более ранних версиях Android.</p> 54 55<p>Создайте файлы макета для Android 5.0 (уровень API 21) в <code>res/layout-v21/</code>, 56а также файлы альтернативного макета для более ранних версий Android (в <code>res/layout/</code>). 57Например, <code>res/layout/my_activity.xml</code> — это альтернативный макет для 58<code>res/layout-v21/my_activity.xml</code>.</p> 59 60<p>Чтобы сделать код более компактным, определите стили в <code>res/values/</code>, измените 61 стили в <code>res/values-v21/</code> для новых API, а также используйте наследование стилей, 62 определив основные стили в <code>res/values/</code> и задав наследование из них в <code>res/values-v21/</code>.</p> 63 64 65<h2 id="SupportLib">Использование вспомогательной библиотеки</h2> 66 67<p><a href="{@docRoot}tools/support-library/features.html#v7">Вспомогательные библиотеки v7</a> 68r21 и более поздних версий включают следующие функции Material Design:</p> 69 70<ul> 71<li><a href="{@docRoot}training/material/theme.html">стили Material Design</a> для некоторых 72системных виджетов в случае применения одной из тем <code>Theme.AppCompat</code>;</li> 73<li><a href="{@docRoot}training/material/theme.html#ColorPalette">атрибуты цветовой палитры темы</a> 74в темах <code>Theme.AppCompat</code>;</li> 75<li>виджет {@link android.support.v7.widget.RecyclerView} для <a href="{@docRoot}training/material/lists-cards.html#RecyclerView">отображения коллекций 76данных</a>;</li> 77<li>виджет {@link android.support.v7.widget.CardView} для <a href="{@docRoot}training/material/lists-cards.html#CardView">создания карточек</a>;</li> 78<li>класс {@link android.support.v7.graphics.Palette} для <a href="{@docRoot}training/material/drawables.html#ColorExtract">извлечения главных цветов 79на изображениях</a>.</li> 80</ul> 81 82<h3>Системные виджеты</h3> 83 84<p>В темах <code>Theme.AppCompat</code> имеются стили Material Design для следующих виджетов:</p> 85 86<ul> 87 <li>{@link android.widget.EditText};</li> 88 <li>{@link android.widget.Spinner};</li> 89 <li>{@link android.widget.CheckBox};</li> 90 <li>{@link android.widget.RadioButton};</li> 91 <li>{@link android.support.v7.widget.SwitchCompat};</li> 92 <li>{@link android.widget.CheckedTextView}.</li> 93</ul> 94 95<h3>Цветовая палитра</h3> 96 97<p>Чтобы получить стили Material Design и настроить цветовую палитру с помощью вспомогательной библиотеки 98Android v7, примените одну из следующих тем <code>Theme.AppCompat</code>:</p> 99 100<pre> 101<!-- extend one of the Theme.AppCompat themes --> 102<style name="Theme.MyTheme" parent="Theme.AppCompat.Light"> 103 <!-- customize the color palette --> 104 <item name="colorPrimary">@color/material_blue_500</item> 105 <item name="colorPrimaryDark">@color/material_blue_700</item> 106 <item name="colorAccent">@color/material_green_A200</item> 107</style> 108</pre> 109 110<h3>Списки и карточки</h3> 111 112<p>Виджеты {@link android.support.v7.widget.RecyclerView} и {@link 113android.support.v7.widget.CardView} имеются в более ранних версиях Android. Они находятся во 114вспомогательной библиотеке Android v7, и для них существуют следующие ограничения.</p> 115<ul> 116<li>В виджете {@link android.support.v7.widget.CardView} применяется программная реализация тени 117с помощью дополнительного отступа.</li> 118<li>Виджет {@link android.support.v7.widget.CardView} не выполняет обрезку своих дочерних представлений, 119пересекающихся со скругленными углами.</li> 120</ul> 121 122 123<h3>Зависимости</h3> 124 125<p>Чтобы воспользоваться этими возможностями в версиях Android, предшествующих 5.0 (уровень API 21), включите в свой проект вспомогательную библиотеку 126Android v7 как <a href="{@docRoot}sdk/installing/studio-build.html#dependencies">зависимость Gradle</a>:</p> 127 128<pre> 129dependencies { 130 compile 'com.android.support:appcompat-v7:21.0.+' 131 compile 'com.android.support:cardview-v7:21.0.+' 132 compile 'com.android.support:recyclerview-v7:21.0.+' 133} 134</pre> 135 136 137<h2 id="CheckVersion">Проверка версии системы</h2> 138 139<p>Следующие функции доступны только в Android 5.0 (уровень API 21) и более поздних версиях:</p> 140 141<ul> 142<li>переходы;</li> 143<li>реакция на касание;</li> 144<li>анимации появления;</li> 145<li>анимации по траектории;</li> 146<li>векторные элементы;</li> 147<li>тонирование элементов дизайна.</li> 148</ul> 149 150<p>Чтобы обеспечить совместимость приложения с более ранними версиями Android, проверьте системный параметр {@link 151android.os.Build.VERSION#SDK_INT version} во время запуска, прежде чем вызвать API любой из этих 152функций:</p> 153 154<pre> 155// Check if we're running on Android 5.0 or higher 156if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 157 // Call some material design APIs here 158} else { 159 // Implement this feature without material design 160} 161</pre> 162 163<p class="note"><strong>Примечание.</strong> Чтобы указать версии Android, поддерживаемые вашим приложением, 164установите атрибуты <code>android:minSdkVersion</code> и <code>android:targetSdkVersion</code> 165в файле манифеста. Чтобы использовать функции Material Design, которые имеются в Android 5.0, задайте 166для атрибута <code>android:targetSdkVersion</code> значение <code>21</code>. Дополнительные сведения см. 167 в <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">руководстве по API 168<uses-sdk></a>.</p> 169