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

你可能感兴趣的:(Android)