Материальный дизайн, AppCompat и обратная совместимость

Я пытаюсь немного лучше понять принципы использования материального дизайна (я новичок в этой области и читал документацию и учебные пособия, но тема для меня все еще немного расплывчата), и я буду рад за немного помощи. До сих пор я пробовал иметь 2 папки (values ​​и values-21) с файлом styles.xml для каждой из них -

значения / styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"></style>

значения-v21 / styles.xml:

<style name="AppTheme" parent="android:Theme.Material.NoActionBar"></style>

Проблема начинается с того, что я пытаюсь использовать действия, унаследованные от AppCompatActivity (насколько я понимаю, это то, что мне нужно сделать для поддержки обратной совместимости на устройствах до Lollipop для таких вещей, как Material Design? Я прав? Дополнительная информация здесь будет отличный). Если я это сделаю, приложение не будет работать на устройствах с API 21 или выше, поскольку «AppTheme» должен наследовать от AppCompat.

Что я могу сделать, чтобы решить эту проблему, так это создать базовую тему, унаследованную от AppCompat, а затем сделать так, чтобы стиль в обоих файлах унаследовал от этой базовой темы ... Но тогда я больше не наследую от Material .... что подводит меня к вопросу (ам) -

Материальный дизайн - это просто заданная тема? И если да, то как мне решить свою проблему? И что именно здесь дает использование AppCompatActivity? Или материальный дизайн - это, по сути, просто набор правил и принципов, которым я должен следовать? И если да, то зачем вообще нужен Theme.Material. *? Я буду рад любой дополнительной информации, которую кто-либо может дать мне по этому поводу.

Спасибо!


person Cookienator    schedule 22.08.2016    source источник


Ответы (1)


Весь смысл AppCompat в том, что вам нужна только одна тема (вам не нужна отдельная в values-v21), и это будет одинаково на всех устройствах.

Theme.AppCompat уже расширяет android:Theme.Material на API 21+ - он просто выполняет всю проверку версии за вас.

person ianhanniballake    schedule 22.08.2016
comment
Итак, по сути, вы говорите, что для использования Material Design на всех устройствах все, что мне нужно сделать, это просто определить тему, которая расширяет Theme.AppCompat, а затем заставить все действия расширять AppCompatActivity? Существуют ли какие-либо рекомендации, которым я должен следовать в отношении элементов пользовательского интерфейса внутри действий? - person Cookienator; 22.08.2016
comment
Этого достаточно, чтобы вы начали. Существует целый веб-сайт материального дизайна, на котором подробно рассказывается о том, как выглядит пользовательский интерфейс материального дизайна, многие из которых находятся в таких библиотеках, как Библиотека поддержки дизайна - person ianhanniballake; 23.08.2016
comment
Еще один вопрос: означает ли это, что для версий старше API 21 AppCompat расширяет что-то еще, в зависимости от версии? - person Cookienator; 23.08.2016
comment
Очевидно. Однако практически все, что составляет материальную тему, по-прежнему работает. В этом весь смысл - person ianhanniballake; 23.08.2016