在使用AppCompat时,我的所有活动是否应始终扩展ActionBarActivity?

时间:2014-11-29 17:20:52

标签: android android-layout android-styles

我想将Material Theme应用到我的应用程序中,并使其在不运行Lolipop的设备上也可用。我的应用目标是:android:minSdkVersion="14android:targetSdkVersion="21"。我做了一个简单的测试应用程序,并将styles.xml中的主题更改为:     

    <style name="AppTheme" parent="@Theme.AppCompat.Light">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="colorAccent">@color/accent</item>
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>

    <style name="MyActionBar"
        parent="@Widget.AppCompat.Light.ActionBar.Solid">
        <item name="android:icon">@drawable/ic_launcher</item>
        <item name="icon">@drawable/ic_launcher</item>
  </style>
</resources>

我的测试应用看起来不错。问题是:我的所有活动是否应该在使用AppCompat的应用程序中扩展ActionBarActivity而不是Activity?如果是这样,为什么?

2 个答案:

答案 0 :(得分:1)

实际上取决于你正在建造什么。在大多数情况下,答案是是的,所有答案都应该延伸ActionBarActivity

如果每项活动都延长ActionBarActivity,您可以在android:theme="AppTheme" application标记下使用AndroidManifest.xml

<application android:theme="@style/AppTheme" ... />

另一方面,如果由于某种原因你不能总是扩展ActionBarActivity,那么 主题"AppTheme"应该与ActionBarActivity配对,而Activity应该具有基本的Android主题,例如。 android:Theme.Holo.Light的每个activity标记AndroidManifest.xml

<activity android:name=".ActionBarActivityChildren" 
          android:theme="@style/AppTheme" ... /> 

<activity android:name=".ActivityChildren"
          android:theme="android:Theme.Holo.Light" ... />

因此,有可能不总是扩展ActionBarActivity,但实际上你永远不会这样做。

答案 1 :(得分:0)

您不需要扩展ActionBarActivity。在Android Studio中,您可以在/app/build.gradle文件中声明.jars等,如下所示:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0' 
}

确保您的版本(此处为21.0.0)不高于从SDK下载的buildToolsVersion(当前为21.0.2)。

在Eclipse中,您可以通过project.properties文件获取库,如下所示:

target=android-21
android.library.reference.1=../appcompat_v7_8

希望有所帮助!