Foundation-AppCompact

note:AppCompact主要用于在较低版本的 Android 系统上恰当地降级,该库可以用于支持material design用户界面交互设计 ,该库已经迁移到androidx

该库主要包含以下4个关键类。

一、ActionBar  导航栏

二、AppCompatActivity  作为activity的基类。

三、AppCompatDialog   窗口

四、ShareActionProvider  第三方分享

1、导航栏,通常情况下我们使用ToolBar来替代ActionBar  ,这是因为Toolbar能够兼容更低的版本。

1.1 首先使用Toolbar时必须去掉主题自导的ActionBar。去掉的方式为在style.xml中定义主题,然后再Activity中引用该主题。

  

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

1.2 在Activity中初始化Toolbar

  setSupportActionBar(toolbar)

1.3 用户界面指南描述一个导航栏,应当具有三个要素:

  • 一个专用区域,可以标识您的应用并指示用户在应用中的位置。
  • 以可预测的方式访问搜索等重要操作。
  • 支持导航和视图切换(通过标签页或下拉列表)。

1.3.1  专用区域显示用户在应用中的位置,对应上图“Sheets”区域,通常用于显示该页面的名字。

1.3.2  以可预测的方式访问搜索等重要操作,对应上图的搜索图标和文件访问图标

1.3.3 支持导航和视图切换。就是显示导航或者back返回。

1.3.3.1 搜索menu

1.3.3.1.1 在menu中定义SearchView

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/search"
          android:title="@android:string/search_go"
          app:actionViewClass="androidx.appcompat.widget.SearchView"
          app:showAsAction="ifRoom"/>
</menu>

1.3.3.1.2  控制SearchView

点击返回的时候,search控件不会自动收回,应用会响应返回事件退出界面,这时需要处理返回键。

a 在onCreateOptionsMenu中初始化

 search = menu.findItem(R.id.search).actionView as SearchView

b 在 onKeyUp中响应返回键,判定此时搜索按钮的展开状态

 when (keyCode) {
     KeyEvent.KEYCODE_BACK -> {
     //获取searchview的展开状态
     val isIconified = search?.isIconified
     if (isIconified != null && !isIconified) {
         search?.isIconified=true
         return true
         }
      }
 }

1.3.3.2 返回键

1.3.3.2.1在初始化Toolbar之后,直接设置以下属性,便可以开启返回键

supportActionBar?.setDisplayHomeAsUpEnabled(true)

1.3.3.2.2响应返回键的点击。在onOptionsItemSelected方法中,监听menu的点击事件。

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
   when (item?.itemId) {
        android.R.id.home -> finish()
   }
   return super.onOptionsItemSelected(item)
}

2、用作Activity的基类

3、用作Dialog的基类

4、第三方分享包含第三方lib比如mod分享 友盟分享。当不集成第三方包时包含两种方式。

4.1 ShareActionProvider 

4.1.1定义menu文件

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_share"
        app:showAsAction="ifRoom"
        android:title="share"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
</menu>

4.1.2 在activity和fragment的onCreateOptionsMenu()中初始化ShareActionProvider

menuInflater.inflate(R.menu.share, menu)
val shareItem = menu?.findItem(R.id.action_share)
val provider = MenuItemCompat.getActionProvider(shareItem) as ShareActionProvider

4.1.3 然后直接发送对应的意图,意图必须指定action为Intent.ACTION_SEND

val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.type = "image/*"
shareIntent.putExtra(Intent.EXTRA_STREAM, uri)
provider?.setShareIntent(shareIntent)

4.2直接使用androidx的ShareCompat

val shareIntent = ShareCompat.IntentBuilder.from(activity)
    .setText(shareText)
    .setType("text/plain")
    .createChooserIntent()
    .apply {
           if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
              addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
              } else {
                addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
              }
           }
startActivity(shareIntent)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
============================================================== 兼容包实际上是为了让android 2.2、android 2.3 android 3.0支持android 4.0中才有的东西的。 比如说Actionbar。如果你不用兼容包的话,你开发含actionbar的程序就不可以在2.2上运行了 Support v11 v12 v13 v14 v17 Android 4.2.2 v18 Android 4.3.1 v21 Android 5.0.1 v22 Android 5.1.1 v23 Android 6.0 这个工程默认的是v21 Anroid 5.0.1, 如果需要编译(v22 Android 5.1.1 或者 v23 Android 6.0)版本,请 分别将values-v22 或者 values-v23 复制到 appcompat\res. 这是因为编译appcompat 需要SDK的部分资源,如果你需要编译v22版本的 appcompat-v7-v22.jar, 却将values-v23 复制到appcompat\res,那么会提示部分资源不存在,除非你选用v23的编译工具。 导入工程的方法见: http://blog.csdn.net/judyge/article/details/49228579 ============================================================== 出现这样的错误,说明你的工程缺乏appcompat V7 包 使用adt开发新建一个Android app,选择支持的SDK版本如果小于11(Android3.0)就会报如下错误。 error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'. 官网给出的答案是: https://developer.android.com/tools/support-library/setup.html#add-library 简单来说就是新的eclipse默认模版主题UI需要使用比较高版本api,如果需要支持低版本,需要导入appCompact库来支持,网上一般给出的解法: File->Import (android-sdk\extras\android\support\v7). Choose "appcompat" Project-> properties->Android. In the section library "Add" and choose "appCompat" 包括stackoverflow上也有很多人遇到,但很多人通过这个解决,但我就是没办法解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值