• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;!-- extend one of the Theme.AppCompat themes -->
102&lt;style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
103    &lt;!-- customize the color palette -->
104    &lt;item name="colorPrimary">@color/material_blue_500&lt;/item>
105    &lt;item name="colorPrimaryDark">@color/material_blue_700&lt;/item>
106    &lt;item name="colorAccent">@color/material_green_A200&lt;/item>
107&lt;/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&lt;uses-sdk&gt;</a>.</p>
169