AppCompat是什么?

在版本21的修订中,带来了material color palette、控件着色、Toolbar支持,还有更多支持所有API 7+的设备。

以往使用AppCompat的唯一入口就是ActionBarActivity类,迫使你使用固定死的一套Activity结构,使得像PreferenceActivity这样的类无法利用AppCompat的特性。

现在,我们将ActionBarActivity里面的内部逻辑都抽离出来,然后封装成一个单一的代理(delegate) api供调用,AppCompatDelegate 。 AppCompatDelegate可以被任意带有Window.Callback的安卓对象创建,比如Activity或者Dialog的子类。你可以通过他的静态方法create()创建:

AppCompatDelegate.create(this, null);

但是

在使用delegate的时候有一些约束,你必须调用它暴露的每一个回调方法(比如onCreate()),但是这也不复杂,而且你还可以将他们写在一个基类中。只要你按照此要求,你就可以将AppCompat的功能应用在任意的Activity子类中。如果你打算使用AppCompatDelegate,我强烈建议你参考一下AppCompatActivity的源码,他是整合AppCompatDelegate的绝佳教材。

但是大多数人都不需要这么底层的自定义,直接使用我们的AppCompatActivity就足够了(就像之前使用ActionBarActivity一样)。

package android.support.v7.app;

public class AppCompatActivity extends FragmentActivity implements AppCompatCallback, TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider 
{

    private AppCompatDelegate mDelegate;

}

主要通过AppCompatDelegate类,获取不同的版本代理

private static AppCompatDelegate create(Context context, Window window,AppCompatCallback callback)
{
        final int sdk = Build.VERSION.SDK_INT;
        if (sdk >= 14)

            return new AppCompatDelegateImplV14(context, window, callback);

        } else if (sdk >= 11)
        {

            return new AppCompatDelegateImplV11(context, window, callback);
        }
        else
        {
            return new AppCompatDelegateImplV7(context, window, callback);
        }
    }

版本代理又互相集成

class AppCompatDelegateImplV14 extends AppCompatDelegateImplV11

class AppCompatDelegateImplV11 extends AppCompatDelegateImplV7 

class AppCompatDelegateImplV7 extends AppCompatDelegateImplBase

abstract class AppCompatDelegateImplBase extends AppCompatDelegate

参考:
http://www.voidcn.com/blog/lrckid/article/p-5005031.html

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值