2

我正在开发一个应用程序minSdkVersion=21。我不希望支持低于21的旧API。如何正确使用Material主题?

Project structure>Dependecies,我仍然可以看到附加的支持库v7。这背后的原因是什么?

什么是应用Material主题API 21设备正确的方式,因为我不断收到错误由于Coordinator layout膨胀或它告诉我使用的主题从Theme.AppCompat而不是android:Theme.Material.Light.DarkActionBar

(某些属性跳过beverity)

的Manifest.xml

<application 
    android:theme="@android:style/Theme.Material.Light.DarkActionBar"> 
    <activity 
     android:name=".MainActivity" 
     android:theme="@android:style/Theme.Material.Light.DarkActionBar"> 
    </activity> 
</application> 

值\ styles.xml

<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> 

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> 

V21 \ styles.xml

<resources> 
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar"> 
    <!-- item tags here --> 
</style> 
</resources> 

的build.gradle

compileSdkVersion 23 
buildToolsVersion "23.0.2" 

defaultConfig { 
    applicationId "com.app.karti.themetestv3" 
    minSdkVersion 21 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 

现在,我得到2个例外这里: 1. Error inflating class android.support.design.widget.CoordinatorLayout 2. You need to use a Theme.AppCompat theme (or descendant) with the design library.

我如果有人能帮忙,我会很高兴。谢谢。

PS:MainActivity类别扩展Activity而不是AppCompatActivity

+1

请粘贴您的build.gradle文件。 –

+0

AppCompat主题无论如何都使用21+的材质主题。 – Philio

回答

3

这背后的原因是什么?

因为您自己添加了它,或者您使用了添加它的模板。例如,IDE附带的Android Studio新项目和新活动向导模板全部使用appcompat-v7

什么是应用材料主题API 21台设备的正确方式,因为我不断收到错误,由于协调布局的膨胀或它告诉我使用的主题从Theme.AppCompat,而不是机器人的:Theme.Material。 Light.DarkActionBar。

不能使用CoordinatorLayout,或任何从Android设计支持库,除非你还使用appcompat-v7和所有的需要(例如,改变你的主题,使用AppCompatActivity)。

所以,你的选择是:

  1. 避免appcompat-v7,独自离开你的活动和东西,但后来不使用CoordinatorLayout,或

  2. 使用appcompat-v7,或

  3. 避免appcompat-v7,让你的活动和东西独自一人,并试图跨越CoordinatorLayout和你想从Android设计中使用的其他任何东西n支持库不使用appcompat-v7

我还没有尝试过交叉移植CoordinatorLayout。交叉口ActionBarDrawerToggle进展顺利。交叉移植Snackbar看起来很痛苦,所以我使用了一个与appcompat-v7没有关联的开源代码。

+0

好吧,用'RelativeLayout'或'LinearLayout'等其他布局替换'CoordinatorLayout'现在就解决了这个问题。正如你所提到的,我需要更多地关注交叉移植。谢谢。 – fireboy91

+0

@ fireboy91:'CoordinatorLayout'主要用于需要对其他地方的事件做出反应的特殊场景,例如FAB滑动以腾出空间来放置“Snackbar”。根据您创建的UI,您可能永远不需要'CoordinatorLayout'。 – CommonsWare

相关问题