每个Android新版本都会引入一些新特性,不过并不是每个人都能做到Android一推出新版本就升级到那个最新版本,实际上,大多数人都至少落后一个版本。而支持库允许在老版本的Android上使用新特性。
Andriod支持库提供了对Android老版本的向后兼容性,这些支持库并不属于Android主版本,支持库中包含开发人员可以在应用中使用的Android新特性。提供支持库意味着你可以为使用老设备的用户和使用更新设备的用户提供同样的体验,尽管他们使用的Android版本不同。
下面是一些支持库的例子
v4支持库:这个支持库包含的特性最多,例如,它支持应用组件和用户界面特性。
v7 Appcompat库:包括应用条支持。
v7 Cardview库:增加了对CardView部件的支持,允许在卡片中显示信息。
约束布局库:允许创建约束布局。
v7 Recycleview库:增加了对RecycleView部件的支持。
设计支持库: 增加了对额外组件的支持,如标签页和导航抽屉。
每个库都包含一组特定的特性。
v7 AppCompat库包含可用于老版本Android的一组最新的主题:实际上,这些主题可以用于几乎所有设备。
接下来将在应用中使用这个库中包含的一个主题,这回增加一个应用条,而且在指定的所有Android版本上都有同样的表现。
在Andoird Studio中创建一个新Android工程,名为Bits and Pizzas.
一、增加v7 AppCompat支持库
在AS中点击File中的Project Structure。
点击Dependencies中的app,如图所示单击右侧的加号添加Library Dependency。
在里面搜索appconpat-v7添加即可。
一旦在工程中增加了AppCompat支持库,就可以在你的应用中使用这个支持库的资源了,在这里我们希望应用其中一个主题,为MainActivity增加一个应用条。
二、AppCompatActivity允许你使用AppCompat主题
想要使用Appcompat主题,就需要使用一种特殊类型的活动,名为AppCompatActivity。这是Activity的一个子类。这个类在AppCompat支持库中,设计用来处理AppCompat主题。如果想要一个应用条,能够提供对Android老版本的向后兼容性,你的活动就要扩展AppCompatActivity类而不是Activity类。
MainActivity应当是AppcompatActivity。
三、使用AndroidManifest.xml可以改变应用条的外观。
观察以下代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.BitsAndPizzas"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
android:icon属性为应用指定一个图标。这个图标作为应用的启动图标,如果你使用的主题会在应用条中显示一个图标,就会使用这个图标。图标是一个mipmap资源,这是一种可以用作为应用图标的图像,它们保存在app/src/main/res中的mipmap资源文件夹中。
android:label属性描述一个对用户友好的标签,它会显示在应用条中,在上面的代码中,< application >标签使用这个属性来为整个应用指定一个标签,也可以为< activity >标记增加这个属性,这会为一个活动指定标签。
android:theme属性指定主题。你既可以使用硬编码写入主题,也可以使用样式应用主题。
四、在样式资源文件中定义样式
样式资源文件包含了你希望在应用中使用的所有主题和样式的详细信息,在AS中创建工程时,IDE会创建一个默认的样式资源文件style.xml,如果没有则需要自行创建。目前最新的AS中已经自动将style.xml替换为theme.xml了,后者提供了夜间版本。
样式文件基本形式如下:
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.BitsAndPizzas" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your light theme here. -->
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="Theme.BitsAndPizzas" parent="Base.Theme.BitsAndPizzas" />
</resources>
那么是样式的名字,parent属性指定这个样式从哪里继承属性,即使用中的主题。
下面是几个常用的内置主题:
Theme.AppCompat.Light有一个浅色背景和应用条。
Theme.AppCompat有一个深色背景和深色应用条。
Theme.AppCompat.Light.NoActionBar有一个浅色背景但是没有应用条。
Theme.AppCompat.NoActionBar有一个深色背景但是没有应用条。
Theme.AppCompat.Light.DarkActionBar有一个浅色背景并有深色应用条。
上述代码中三个item项是自行添加的,colorPrimary指示应用使用主颜色,colorPrimaryDark指示应用作为状态条的颜色,colorAccent指示所有UI控件的颜色。
所以仍然需要在颜色资源文件中定义这个三个颜色。在colors.xml文件中添加下列三行代码如下:
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
直接启动应用便会在应用上方的应用条已经变成了蓝色。