Android AppcompatActivity 基础用法

前言

最近大把时间捯饬一些新东西。发现很多东西知道皮毛,深究起来都是半吊子,写个简单的app框架写基类,继承AppcompatActivity改了一大上午。廉颇老矣~,尚能饭否。做个记录

列个大纲

  1. v7包含那些api,可以提供的功能是什么?

  2. 从那个版本开始引入的,最初目的是为了解决什么问题?

  3. 用AppconpatActivity替换FragmentActivity需要注意什么?

  4. 老版本迁移,新版本使用遇到问题? 解决思路

  5. 扩展

一部分

v7包含那些api,可以提供的功能是什么?

v7 appcompat 库

此库添加了对操作栏用户界面设计模式的支持。此库包含对 Material Design 用户界面实现的支持。
注:此库依赖于 v4 支持库。
下面是 v7 appcompat 库中包含的一些关键类:

  • ActionBar - 提供操作栏用户界面模式的实现。如需了解有关使用操作栏的详细信息,请参阅操作栏开发者指南。
  • AppCompatActivity - 添加一个应用 Activity 类,此类可作为使用支持库操作栏实现的 Activity 的基础类。
  • AppCompatDialog - 添加一个对话框类,此类可作为 AppCompat 主题对话框的基础类。
  • ShareActionProvider - 包含对可以添加到操作栏中的标准化分享操作(例如电子邮件或发帖至社交应用)的支持。
    此库的 Gradle 构建脚本依赖关系标识符如下所示:
com.android.support:appcompat-v7:24.2.0

v7 cardview 库
此库添加了对 CardView 小部件的支持,让您能够在卡片内显示信息,从而使应用具备一致的外观。这些卡片对 Material Design 实现非常有用,并在电视应用布局中广为使用。
此库的 Gradle 构建脚本依赖关系标识符如下所示:

com.android.support:cardview-v7:24.2.0

v7 gridlayout 库
下载 Android 支持库后,此库可以添加对 GridLayout 类的支持,让您能够使用网状方格安排用户界面元素。如需了解有关 v7 gridlayout 库 API 的详细信息,请参阅 API 参考中的 android.support.v7.widget 软件包。
此库的 Gradle 构建脚本依赖关系标识符如下所示:

com.android.support:gridlayout-v7:24.2.0

v7 mediarouter 库
此库可以提供 MediaRouter、MediaRouteProvider 和支持 Google Cast 的相关媒体类。
一般而言,利用 v7 mediarouter 库中的 API,您可以控制当前设备到外部屏幕、扬声器和其他目标设备的媒体渠道和流的路由。此库包含的 API 可以用于发布应用特定的媒体路由提供程序、发现和选择目标设备,以及检查媒体状态,等等。如需了解有关 v7 mediarouter 库 API 的详细信息,请参阅 API 参考中的 android.support.v7.media 软件包。
此库的 Gradle 构建脚本依赖关系标识符如下所示:

com.android.support:mediarouter-v7:24.2.0

支持库 r18 中引入的 v7 mediarouter 库 API 在后续版本的支持库中可能会发生更改。目前,我们建议仅使用与 Google Cast有关的库。
v7 palette 库
v7 palette 支持库包含 Palette 类,此类让您可以从图像中抽取突出颜色。例如,音乐应用可以使用 Palette 对象从专辑封面抽取主要颜色,然后使用这些颜色创建一个色彩协调的歌曲标题卡。
此库的 Gradle 构建脚本依赖关系标识符如下所示:

com.android.support:palette-v7:24.2.0

v7 recyclerview 库
recyclerview 库添加了 RecyclerView 类。此类能够为 RecyclerView 小部件提供支持,RecyclerView 是一种通过提供有限的数据项窗口有效显示大数据集的视图。
此库的 Gradle 构建脚本依赖关系标识符如下所示:

com.android.support:recyclerview-v7:24.2.0

v7 Preference 支持库
首选项软件包提供的 API 支持添加 preference 对象(例如 CheckBoxPreference 和 ListPreference),方便用户修改 UI 设置。
v7 Preference 库添加了对接口(例如 Preference.OnPreferenceChangeListener 和 Preference.OnPreferenceClickListener)以及类(例如 CheckBoxPreference 和 ListPreference)的支持。
此库的 Gradle 构建脚本依赖关系标识符如下所示:

com.android.support:preference-v7:24.2.0

二部分

从那个版本开始引入的,最初目的是为了解决什么问题?

android.support.v7.appcompat 库是在 added in version 24.1.0
android 支持库为了兼容早期版本,支持新功能而设计的,比如5.0引入的meteral Design ,在低版本不能有5.0 效果,但是引入兼容包之后,在低版本同样也可以有5.0效果。v4,v7兼容包会跟随的最新的系统api版本更新不同的版本。以便于能够及时在全系列api级别具有统一的行为和显示效果。

官方扩展链接:https://developer.android.google.cn/topic/libraries/support-library/features

三部分

用AppconpatActivity替换FragmentActivity需要注意什么?

早期(5.0 系统前后)的标题栏是ActionBar, 后面google 将actionBar 名字用ToolBar 替换了.内部实现沿用早期ActionBar api,因为在高版本api中还保留ActionBar 这个抽象类,并且Toolbar是实现类。足以说明
Toolbar是早期ActionBar的替代者。

如果打算用Toolbar作为全局导航栏,加入兼容库 appcompat_v7会引入一些编译异常。

比如:

appcompat_xxx 类找不到和其他一些关于appcompat问题。

比较快速的解决方式就是,统一升级Appcompat_v4,v7 两个包到最新版本

注意:

兼容库需要和 Target-sdk ,build-sdk对应。总不能用appcompat_v7_28.0.0的v7兼容库在target 26的项目中吧。这样系统会提示版本过高.根据提示改就可以了。

图一

Android AppcompatActivity 基础用法_第1张图片

简单介绍下AppcomActivity类,它里面主要针对Toolbar,和 menu 方法进行复写并进行功能实现。他就是ActionBar.

四部分

老版本迁移,新版本使用遇到问题? 解决思路
到底用不用ToolBar? 当然要用

我们项目中同时包含两种导航栏 【自定义的导航栏】和【封装的ToolBar导航栏】,一个原因是系统遗留问题,全部替换改的地方比较多,另一个原因是组员习惯用自定义的导航栏,让用新的方式一时不愿意改。后期准备移除自定义导航栏,所有全部在Toolbar上扩展。

优点:

  • 沉浸式导航栏
  • Toolbar容易扩展,功能强大。
  • 官方进行维护

缺点:

  • 有学习成本

五 扩展

扩展是针对Toolbar的扩展的,重新Toolbar布局,封装api这些,这里有个小demo

github:https://github.com/yatou252303/polymerization.git

总结一下:AppcompaActivity相对于Activity的主要的两点变化;

  1. 主界面带有toolbar的标题栏;
  2. theme主题只能用android:theme=”@style/AppTheme (appTheme主题或者其子类),而不能用android:style。
    否则会提示错误: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
  3. 出现的ide 报编译异常时候,解决办法就是,思路就是检查v7,v4版本是否兼容,建议用同样版本号的v4与v7。

引用
早期actionbar https://github.com/googlesamples/android-ActionBarCompat-ShareActionProvider/blob/master/Application/build.gradle
官方文档 https://developer.android.google.cn/reference/android/support/v7/app/AppCompatDialog
https://github.com/yatou252303/polymerization.git

你可能感兴趣的:(android,基础知识)