精华内容
下载资源
问答
  • 安卓平台其中一个很牛逼的地方在于它支持各种不同的设备。从你的平板电脑,到你的手机,电视等,安卓无处不在。安卓想成为一个全领域的移动计算平台。光从它的数量上来说,已经算是很成功了。 支持所有这些设备是有...

    安卓平台其中一个很牛逼的地方在于它支持各种不同的设备。从你的平板电脑,到你的手机,电视等,安卓无处不在。安卓想成为一个全领域的移动计算平台。光从它的数量上来说,已经算是很成功了。

    支持所有这些设备是有一些挑战的。不管硬件还是软件上的不同,用户希望应用程序可以在每一台设备上用样的运行;同样,对于开发者来说,你不能总指望用户已经升级到最近的安卓版本。事实上,开发者遇到的用户大多使用18个月前或者更老的版本。

    如果没有安卓团队的帮助,开发者会不得不做些“丑陋的代码”去兼容那些使用老版本的用户。幸运的是,安卓团队已经意识到包容老设备这一点很重要。不过兼容老的同时不影响新的这一要求是一个架构上的挑战,因为安卓接口随着版本演进一直是在变动的。如何让那些没有更新设备的老安卓设备成功运行这些最新的安卓接口呢?

    答案就是安卓团队做得最重要和奇特的设计决定:安卓支持库(the Android Support Library)

     

    什么是安卓支持库(Android Support Library)?

    早在2011年它作为安卓兼容库发布,在75%的应用中使用过,是最广泛使用的安卓库。它事实上不是一个单一的文件,而是一个集合,其中可以大致可以分为两组:兼容库组件库

    每一个库都指明了所支持的最小sdk版本。有一点容易弄错,就是高版本的支持库很容易被理解为涵盖了低版本支持库的所有内容。实际上,并非如此。(可能你认为v7-appcompat包含了v4,但是不是这样的)

    兼容库(Compatibility Lib)

    专注新版本向后兼容,使老版本上可以使用新的API。主要的兼容库有v4和v7版本。

    v4

    正如名字所示,它向后兼容到API4.支持了一些主要类的实现,比如Frament和Loader(API11引入),也支持了一些广泛使用的但不存在framework中的类,比如ViewPager和DrawerLayout。

    不要光看名字。不管是不是要支持安卓1.6,这里仍然有一些很有用和重要库。并且由于支持库的引用依赖,一般很难避免不用v4.

    v7

    通常单纯地用于兼容。v7提供了诸如ActionBar(API11引入),Toolbar(API21引入),并且向后兼容到API7.它依赖v4支持库。

    幕后情况

    兼容库大量地使用shims技术(填充码)来向后支持。这些shrims是简单的封装,如果在新版本上调用,shrims会将调用传入底层framework实现;在老版本中,可能就是稍微不同的实现或者减少了一些功能。

    在一些情况下,shim没有使用到。相对地,支持库使用了一套自己的实现来代替framework的实现。(可能真的是没法100%兼容了)主要的一个例子就是v4中的Fragment。这个Fragment和framework中的Fragment就不一样,也不兼容。

    这个影响了整个安卓Framework,这个是有意思的设计。安卓创建了一整套不同的兼容实现,重复创造了大量相同功能。这些向后兼容的实现并行于framework,并且有它们自己的继承结构以及bugs。

    Google声称这些情况下大部分API仍然是一样的,除了那些属于不同package并且有一些不同的方法。可事实上,是有一些不一致和非显著不同存在于支持库和framework之间的,并且这些不同很有可能将随时间推移而增长。

    另外,在一些情况下,开发者以为他们自己有选择去使用framework或者支持库,但其实这得听从于所支持的引用出自哪里。比如说,v7支持库允许开发者使用Material Design UI(API 21引入)。但是这样需要Activity继承AppCompatActivity,而AppCompatActivity是继承自FragmentActivity(v4中实现)。所以在API21之下或者使用Material Design UI特性的全部都强制使用了v4版本的Fragment,而不是framework中的Fragment。不过Google认为使用支持库是一个好的实践,即使没有需求去使用它。

    组件库

    安卓支持库同样提供了更小,更模块化的组件库,从而使开发者可以添加framework中没有的特性。这些库可以轻松的增删而不用考虑引用问题。以下是几个有价值的组件库:

    • v7-recyclerview: provides the RecyclerView component, which efficiently displays and animates large amounts of data and is designed to replace ListView
    • v7-cardview: provides the CardView component, enabling the cards UI design pattern
    • v7-gridlayout: provides the GridLayout class, which enables organizing UI elements into a rectangular grid
    • v7-mediarouter: provides MediaRouter and related classes, enabling Google Cast support
    • v7-palette: provides the Palette class, which enables developers to identify primary colors in an image

    向你工程里添加这些组件就如同在你的build脚本中添加一个引用一样简单。

    先不说便利性和模块化的好处,将组件从库中抽离出来允许Google在Framework之外发布重要API。这样在正式何入到framework之前方便收集反馈,和设计上的迭代更新。总比先在framework中发布再做更改好的吧。

     

    其他库

    同样包含了一些其他比较少用的库,但是值得注意:

    • v8: provides support for RenderScript (introduced in API 11) back to API 8
    • v13: provides additional compatibility support for the Fragment UI pattern and bundles the v4 library
    • v17: provides support for building TV UIs
    • multidex: provides support for building apps with multiple DEX files
    • annotations: provides support for annotations like @NonNull and @IntDef

    常见问题

    我什么情况下应该用安卓支持库?

    如果你需要的特性比你应用支持的最低sdk版本要老,或者该特性在标准framework中不支持。

    不过Google认为使用支持库是一个好的实践,即使没有需求去使用它。

     

    我应该用哪一个版本?

    简而言之,使用有你需要功能的版本。比如你要用RecyclerView,直接将v7-recycleview引用添加到你的build脚本中就好。

    如果你需要一个v4组件,你可以使用v13如果你的最小sdk版本支持的话。

    不过,支持库中的引用可能会使你决定使用哪一个版本。

     

    翻译自 http://martiancraft.com/blog/2015/06/android-support-library/

     

    转载于:https://www.cnblogs.com/idealcat/p/5536471.html

    展开全文
  • 安卓与新

    2019-08-26 20:05:38
    最近在搞Toolbar,在gradle中导入v7的时候没有报错,在Activity中却无法使用中的类,网上查了好多也没解决问题,后来在stack overflow中找到了答案。 原来是导入时androidx和android冲突。我新建项目是自动使用...

    最近在搞Toolbar,在gradle中导入v7库的时候没有报错,在Activity中却无法使用库中的类,网上查了好多也没解决问题,后来在stack overflow中找到了答案。
    原来是导入时androidx和android冲突。我新建项目是自动使用的是androidx,这是在高版本中才能使用,而我却手动导入com.android.support:appcompat-v7,所以就出现报错无法解析v7。
    然后我就搜索旧包和新包,发现一个博主写的了,分享一下。
    https://www.jianshu.com/p/1466ebefe4d0

    展开全文
  • 问题 升级compileSdk版本到26,同时修改了support包的版本,报错 all com.android.support libraries must use the exact same version specification...也就是说有引入的第三方和目前编译版本有冲突。 ...

    问题

    升级compileSdk版本到26,同时修改了support包的版本,报错

    all com.android.support libraries must use the exact same version specification(mixing versions can lead to runtime crashes)

    也就是说有引入的第三方库和目前编译版本有冲突。

    解决

    一般这种问题解决方案是,在指定的有冲突的库的依赖处,添加 exclude group: 'com.android.support',可以将冲突库不包含在编译,如

    compile('xx.xxx.xxxxx:xxxxx:1.5.5') {
        exclude group: 'com.android.support'
    }
    

    但是问题是我不知道哪个第三方库冲突,不可能一个个检查吧?

    这时候只需要在gradle文件中添加如下代码,让所有的第三方包强制使用指定版本的support包:

    configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name.startsWith("multidex")) {
                    details.useVersion '26.1.0'
                }
            }
        }
    }	
    

    以及在自己写第三方库给别人用的时候,对于support包的依赖方式改成provided(或者compileOnly,gradle3.0),这样不会把support
    打包,方便使用的人。

    关于gradle3.0更多

    gradle升级到3.0后,依赖的方式变得更多了,最显著的变化就是,之前一直用的compile可以替换为implementation, 如

    implementation 'xx.xxx.xxxxx:xxxxx::1.5.5'
    

    implementation是指引入依赖,这个第三方包引入的东西,你在项目里无法使用,有点接口的味道,屏蔽内部实现。可以加快gradle编译的速度。

    同样的对于 debugcompile releasecompile 都有debug implementation release implementation 与之对应。

    展开全文
  • 安卓开源之动画篇

    2016-04-13 13:53:18
    本文主要介绍收集了笔者所用过的开源动画,达到一些比较好看的效果。一个富有动感的 Sheet链接:zzz40500/AndroidSweetSheet: 一个富有动感的Sheet(选择器)效果如下示例代码package com.zj.testsheet;import ...

    本文主要介绍收集了笔者所用过的开源动画库,达到一些比较好看的效果。

    一个富有动感的 Sheet

    链接:

    zzz40500/AndroidSweetSheet: 一个富有动感的Sheet(选择器)

    效果如下

    这里写图片描述

    示例代码

    package com.zj.testsheet;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.RelativeLayout;
    import android.widget.Toast;
    
    import com.mingle.entity.MenuEntity;
    import com.mingle.sweetpick.BlurEffect;
    import com.mingle.sweetpick.RecyclerViewDelegate;
    import com.mingle.sweetpick.SweetSheet;
    
    import java.util.ArrayList;
    
    public class MainActivity extends AppCompatActivity {
    
        SweetSheet mSweetSheet;
        RelativeLayout rl;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            rl= (RelativeLayout) findViewById(R.id.rl);
            // SweetSheet 控件,根据 rl 确认位置
            mSweetSheet = new SweetSheet(rl);
    
    
            final ArrayList<MenuEntity> list = new ArrayList<>();
            //添加假数据
            MenuEntity menuEntity1 = new MenuEntity();
            menuEntity1.iconId = R.drawable.ic_account_child;
            //menuEntity1.titleColor = 0xff000000;
            menuEntity1.title = "code";
            MenuEntity menuEntity = new MenuEntity();
            menuEntity.iconId = R.drawable.ic_account_child;
            //menuEntity.titleColor = 0xffb3b3b3;
            menuEntity.title = "QQ";
            list.add(menuEntity1);
            list.add(menuEntity);
            list.add(menuEntity);
            list.add(menuEntity);
            list.add(menuEntity);
            list.add(menuEntity);
            list.add(menuEntity);
            list.add(menuEntity);
            list.add(menuEntity);
            list.add(menuEntity);
            list.add(menuEntity);
            list.add(menuEntity);
            list.add(menuEntity);
    
    //设置数据源 (数据源支持设置 list 数组,也支持从menu 资源中获取)
            mSweetSheet.setMenuList(list);
    
            SweetSheet mSweetSheet2 = new SweetSheet(rl);
    
            //从menu 中设置数据源
            mSweetSheet2.setMenuList(R.menu.menu_sweet);
    //根据设置不同的 Delegate 来显示不同的风格.
            mSweetSheet.setDelegate(new RecyclerViewDelegate(true));
    //根据设置不同Effect来设置背景效果:BlurEffect 模糊效果.DimEffect 变暗效果,NoneEffect 没有效果.
            mSweetSheet.setBackgroundEffect(new BlurEffect(8));
    //设置菜单点击事件
            mSweetSheet.setOnMenuItemClickListener(new SweetSheet.OnMenuItemClickListener() {
                @Override
                public boolean onItemClick(int position, MenuEntity menuEntity1) {
    
                    //根据返回值, true 会关闭 SweetSheet ,false 则不会.
                    Toast.makeText(MainActivity.this, menuEntity1.title + "  " + position, Toast.LENGTH_SHORT).show();
                    return true;
                }
            });
    
            mSweetSheet.show();
        }
    }

    A fluent Android animation library。安卓动画库

    主要包括一些进度条效果

    链接:

    gzu-liyujiang/ViewAnimator: A fluent Android animation library。安卓动画库,加入了一些不错的动画,如:fall、shake、flash、fadeIn、rollOut……支持任意路径动画(示例动画为不断冒出来的桃心及飘雪),支持按SVG格式的path运动。部分已合并到原作者florent37的主分支

    效果如下

    这里写图片描述

    示例代码

    private void animateParallel() {
            ViewAnimator.animate(mountain, image)
                    .dp().translationY(-1000, 0)
                    .alpha(0, 1)
    
                    .andAnimate(percent)
                    .scale(0, 1)
    
                    .andAnimate(text)
                    .dp().translationY(1000, 0)
                    .textColor(Color.BLACK, Color.WHITE)
                    .backgroundColor(Color.WHITE, Color.BLACK)
    
                    .waitForHeight()
                    .interpolator(new AccelerateDecelerateInterpolator())
                    .duration(1000)
    
                    .thenAnimate(percent)
                    .custom(new AnimationListener.Update<TextView>() {
                        @Override
                        public void update(TextView view, float value) {
                            value = value * 100;
                            view.setText(String.format(Locale.US, "%.0f%%", value));
                        }
                    }, 0, 1)
    
                    .andAnimate(image)
                    .rotation(0, 360)
                    .onStop(new AnimationListener.Stop() {
                        @Override
                        public void onStop() {
                            Intent intent = new Intent(StartActivity.this, MainActivity.class);
                            startActivity(intent);
                        }
                    })
    
                    .duration(1000)
    
    
    
                    .start();
    }

    recycleView动画效果

    链接:

    gabrielemariotti/RecyclerViewItemAnimators: An Android library which provides simple Item animations to RecyclerView items

    效果如下:

    这里写图片描述

    示例代码


    recyclerView= (RecyclerView) findViewById(R.id.id_recyclerview);
    recyclerView.setLayoutManager(new GridLayoutManager(this, 4));
    mAdapter=new HomeAdapter();
    slideInBottomAnimatorAdapter=new SlideInBottomAnimatorAdapter(mAdapter,recyclerView);
    recyclerView.setAdapter(slideInBottomAnimatorAdapter);

    展开全文
  •  Snackbar是Android Support Design Library支持的一个控件,用于在界面下面提示一些关键信息,跟Toast不同的地方是SnackBar允许用户向右滑动消除它,同时,也允许在SnackBar中设定一个Action,当用户点击了...
  • 我遇到的:导入到dependencies里:依赖就画...implementation ‘com.android.support:recyclerview-v7:28.0.0’ Ok 2.重构的时候编译出现available for offline mode的问题 解决方案:在Settings-Build.Execution,De...
  • android support 源码支持,主要为使用eclipse安卓开发的用户提供方便
  • 这几天更新sdk,看到support更新到23.1.1了,加入新的design,于是下载来看看怎么用,按照以前的方法我是把v7包中的类都复制到当前workspace,然后在使用过程中发现了不少问题,特此做下记录: 1、android....
  • 安卓完美屏幕适配 百分比布局 下载解压到sdk\extras\android\m2repository\com\android\support路径下即可用 android studio实测可用
  • CityPicker已经有超过两年时间没有维护了,但是还是占据百度“安卓城市列表选择”的前列,说明这个项目确实简单好上手。 CityPicker教程 https://www.jianshu.com/p/6b4330ea6603 网上有很多类似的城市列表选择的...
  • 安卓开发兼容包:android-support-v8-renderscript.jar

    千次下载 热门讨论 2015-04-06 08:19:52
    用于低版本(API Level8及以上)的安卓系统的图像处理的文件,例如模糊、矩阵运算等的图像处理
  • 官方文档 实现: 第一步:添加依赖 implementation '... implementation "com.android.support:design:28.0.0" 第二步:布局文件: <?xml version="1.0" encoding="utf-8"?>...
  • android8.0 sdk没有percent百分比布局 ,这里吧三个源文件打包上传,下载下来粘贴到安卓SDK的support文件夹下,应该就可以使用了
  • 使用Snackbar首先要在build.gradle app中添加的依赖 compile 'com.android.support:design:26.+' : 注意
  • Unity打包APK缺少Support-V4 java.lang.NoClassDefFoundError: Failed resolution of: Landriod/support/v4/content/ContextCompat问题解决方式Gradle打包遇到的其他问题 问题 这两天第一次接安卓SDK的东西,好不...
  • 趁周末,把安卓项目的代码迁移到AndroidX,有些项目是引用了第三,有些是全部使用AndroidX的支持,然后编译报错日志如下: Duplicate class android.support.v4.app.INotificationSideChannel found in ...
  • 该TabLayout的功用,简单...android.support.design.widget.TabLayout在Android扩展(extras)支持(support)包design中,但是design又依赖另外一个support v7包中的appcompat,因此需要事先导入,在导入过程中,...
  • Testing Support Library 测试支持包() 这个提供了一系列的api快速的创建和运行测试对于你的app,包括jUnit 4 和用户(UI)的测试,创建可以使用android studio IDE 或者通过命令行。 测试包支持安卓...
  • 安卓JNI

    2020-03-03 11:20:36
    一: 什么是安卓的JNI JNI是Java Native Interface的缩写,通过JNI...(1)创建安卓JAVA工程时选中 include C++ support (2)C/C++是在JAVA中通过System.loadLibrary动态加载的. (3)在JAVA类中添加对应C...
  • 安卓webview lib

    2020-07-09 10:05:38
    libwebviewchromium_loader.so libwebviewchromium_plat_support.so...安卓系统运行webview核心必要的两个文件,位置;/system/lib 文件提取自 天语火星一号flyme5系统(32位安卓5.1), 实测酷派y91-921的5.1系统正常使用
  • 今天导入其他人的项目,老版本了 我的android studio 是新版本 ,配置如下: 但是怎么都显示 ERROR: Failed to resolve: ...第二:android studio 3.0以上要添加这个,要使用从26.0.0版本开始的支持,需要将Goo...
  • 安卓5.0后,谷歌最新的百分比布局(percent-support-lib)。事实上LinearLayout的layout_weight也能实现百分比效果,只是这个更直接 1.简单介绍 这个提供了:两种布局供大家使用: ...
  • 挫折经历的太少,所以总是把一些琐碎的小事看得很重。MainActivity.java代码:package siso.weekv;...import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View;public
  • 先来看看这篇文章说的是什么吧 ...我想大部分人应该都在使用Gradle来依赖管理,还没有使用的去面壁思过,Gradle使用起来简直太好用了,举个例子,我们想依赖个support-v4包,直接一句话: compile 'com.a
  • 老的 support 包被整合进了 Jetpack,例如上图 Foundation 模块的 AppCompat,整合进去之后,包名做了一下修改,全部以 androidx 开头。Android Studio 提供的迁移工具(Refactor > Migrate to AndroidX)可以将...
  • Android Support Library

    2016-05-13 22:18:00
    title: Android Support Library tags: Support Library,支持 ...Android Support Library(安卓支持)是一系列代码的集合,提供对早期Android 1.6+(API 4+)系统的兼容,并包含一些额外功能...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 166
精华内容 66
关键字:

安卓support库