android.support.v7库的配置—— 为什么跟别人的步骤一样你却配不好support.v7库?

为什么你配置不好support.v7库

其实搜索android.support.v7的配置,百度上会出来很多回答。但是按照教程上面走了,其实也配置不好support.v7库。这是为什么呢?其实不一定是教程错,也不一定是你跟错,而是教程太老了,和你的Android Studio版本相差太大。
现在(我写博客的日期是2020.3.1)Android Studio是默认使用androix的,引起导入support.v7库不起作用的根本原因是下面这两句话,但是现在很多博客根本没有提到这点。要配置support.v7库,必须将其注释(配置support.v7完整过程请往后看):
在这里插入图片描述
下面我们介绍两种遇到support.v7库报错的解决方法吧。

佛系做法——直接使用androidx

我们遇到support.v7库的情况通常分为两种:

  1. 在github之类的地方拷下来了别人的整个工程,其中包含support.v7库。这种情况直接打开工程等待项目Sync完成就行了(注意要联网,联网后Android Studio会帮我们自动下载很多需要的依赖)。
  2. 在教程、书本中读到和support.v7库相关的程序片段。这个其实也好办,直接把对应的support.v7库中的内容换成androidx中对应的内容就行了。具体的替换方法:
  • Java代码中,删除所有与v7相关的import项,然后四处Alt + Enter, 系统会给你自动androix中对应的import项。比如,删除本行:

    import android.support.v7.app.AppCompatActivity;
    

    Alt + Enter后系统会加上:

    import androidx.appcompat.app.AppCompatActivity;
    
  • xml代码中,也是同样的方法,替换。直接删除原有控件名称,再输入时,系统就会自动提示androidx中对应的控件。比如,我将support.v7库中的Toolbar控件直接粘贴到使用androidx的项目中,控件是灰色的,说明不能用。
    在这里插入图片描述
    删除原有的控件名(android.support.v7.widget.Toolbar),输入Toolbar,直接Enter选择系统提供的Toolbar控件。
    在这里插入图片描述
    变白了,说明现在的控件是正确的,得到了替换。
    在这里插入图片描述
    强烈推荐直接使用androidx中的控件替换v7库中的控件,反正v7有的anroidx都有,而且v7库已经比较老了。。。不过如果你一定要配置好v7库的话,那么请往下看吧。

注意:support.v7库中的控件所用函数会和androidx中稍有不同。

折腾做法——support.v7库的配置

我使用的Android Studio版本如图所示,最个版本的已经默认使用androidx中的控件了。下面我们来禁用androidx,配置support.v7。
在这里插入图片描述

  1. 首先新建一个项目,这里就叫做TestSupportV7吧。在这里插入图片描述
  2. 尝试在项目中import android.support.v7相关的库,失败,这个时候可以看到是不行的。
    在这里插入图片描述
  3. 找到app目录下的build.gradle,替换dependencies{}中的内容。
    在这里插入图片描述
    原始的dependencies{}中有很多和androidx相关的内容,我们将其删掉:
    在这里插入图片描述
    用下面的内容替换:(顺带提一下,大家在网上可能会看到有用compile而不是implementation的,这可能是早期的设置,现在没有用compile的了)
	implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

替换后内容如下,记得点击“Sync Now”更新依赖。
在这里插入图片描述
4. 这时候会发现support.v7库那一行标红。这是因为support.v7库能够支持的最高的sdkVersion为28,而我们现在项目中的是29。将build.gradle中android{}标签中的29都换成28即可。
在这里插入图片描述
5. 很多教程进行到上一步就停止了,但是我们尝试在Activity中导入support.v7库,系统仍然不会有自动提示,说明实际上配置没有成功。
在这里插入图片描述
6. 这时候就用到我们一开始说的能够根本原因——现在的Android Studio是默认使用androidx的,我们需要将androidx禁用才可以是使用v7库。打开gradle.properties,并注释下面两句话即可达到目的。
gradle.properties在项目的位置
在这里插入图片描述
最后Sync Now:
需要注释的两句话
7. 尝试导入v7库,成功。这时其实v7库的导入已经成功了。
在这里插入图片描述
在这里插入图片描述
8. 最后删除项目中一些标红的、和androidx有关的部分即可。
这里有个比较隐蔽的错误,ConstrainLayout也是与androidx有关的控件,我们前面设置dependencies已经把他的依赖删除了,所以下图中界面呈现灰色(不可用),需要换成别的控件。否则即使没报错也会出错。
在这里插入图片描述
可以把最外层控件换成LinearLayout或者别的;下面打x的是ConstrainLayout中的特有属性,不报错,但是也需要删除:
在这里插入图片描述
10. 删完和androix相关的那些我们就可以运行程序啦:
在这里插入图片描述
最后分享一下自己之前用support.v7库的时候的一些dependencies设置吧。并非必须的设置,加进去用support.v7库写界面会比较方便。当然我们也说了,现在当然推荐默认的androidx啦。

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'de.hdodenhof:circleimageview:3.1.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.github.bumptech.glide:glide:3.7.0'
}
  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
============================================================== 兼容包实际上是为了让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上也有很多人遇到,但很多人通过这个解决,但我就是没办法解决。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值