Я хотел бы знать, почему моя студия Android (версия 1.5.0) по умолчанию расширяет AppCompatActivity вместо Activity , даже если я выбрал минимальный уровень API как 19 и я не знаю, помогает ли это.

Android Studio предупреждает об устаревших методах других API (например: Android Studio warns that navigation mode is deprecated in API 21, but I'm using API 19 (and I want to use only it)).

1
Fernando Santos 29 Фев 2016 в 03:09

2 ответа

Лучший ответ

Это связано с тем, что AppCompatActivity обеспечивает совместимость с другими уровнями API (до 15), что обеспечивает материальный дизайн для более старых версий Android. Вы можете узнать больше здесь Activity, AppCompatActivity, FragmentActivity и ActionBarActivity: когда следует Что использовать?

1
Community 23 Май 2017 в 11:59

Appcompat устанавливается шаблонами проектов студии Android.

Путь к шаблонам: [android-studio-pathpting/plugins/android/lib/templates . При создании нового действия он будет включать файл конфигурации: activities/common/common_globals.xml.ftl , он выглядит так:

<#assign theme=getApplicationTheme()!{ "name": "AppTheme", "isAppCompat": true }>
<#assign themeName=theme.name!'AppTheme'>
<#assign themeNameNoActionBar=theme.nameNoActionBar!'AppTheme.NoActionBar'>
<#assign appCompat=theme.isAppCompat!false>
<#assign appCompatActivity=appCompat && (buildApi gte 22)>  
...
<global id="appCompat" type="boolean" value="${((isNewProject!false) || (theme.isAppCompat!false))?string}" />
<global id="appCompatActivity" type="boolean" value="${appCompatActivity?string}" />
...
<#if !appCompat>
<global id="superClass" type="string" value="Activity"/>
...
<#elseif appCompatActivity>
<global id="superClass" type="string" value="AppCompatActivity"/>
...

AppCompat будет иметь значение true, если это новый проект или в проекте используется тема appCompat (которая является темой по умолчанию). Поэтому, если для переменной appCompat задано значение false, по умолчанию будет использоваться Activity.

<#assign appCompat=false>
<global id="appCompat" type="boolean" value="false" />

Возможно, потребуется изменить и шаблоны стилей, они используют тему appCompat.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat<#if
        baseTheme?contains("light")>.Light<#if
        baseTheme?contains("darkactionbar")>.DarkActionBar</#if></#if>">

Примечание. Если эти файлы изменены, студия Android попытается заменить их файлами по умолчанию при обновлении до новой версии.

0
wrkwrk 29 Фев 2016 в 03:20