PopupWindow源码分析

2021-07-02 22:07

阅读:511

  • 可以看出,先判断是否show,如果没有showing的话,则进行contentView赋值,如果mWindowManager为null,则取获取mWindowManager,这个很重要。最后便是根据SDK版本而不是在构造函数中设置附加InDecor的默认设置,因为构造函数中可能没有上下文对象。我们只想在这里设置默认,如果应用程序尚未设置附加InDecor。

    
    public void setContentView(View contentView) {
    //判断是否show,如果已经show,则返回
    if (isShowing()) {
        return;
    }
    //赋值
    mContentView = contentView;
    
    if (mContext == null && mContentView != null) {
        mContext = mContentView.getContext();
    }
    
    if (mWindowManager == null && mContentView != null) {
        mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
    }
    
    //在这里根据SDK版本而不是在构造函数中设置附加InDecor的默认设置,因为构造函数中可能没有上下文对象。我们只想在这里设置默认,如果应用程序尚未设置附加InDecor。
    if (mContext != null && !mAttachedInDecorSet) {
        setAttachedInDecor(mContext.getApplicationInfo().targetSdkVersion
                >= Build.VERSION_CODES.LOLLIPOP_MR1);
    }

  • 评论


    亲,登录后才可以留言!