【Android】不依靠Activity和Dialog显示View的方法

一、首先我们先看下Activity是如何显示View

平常我们在Activity的onCreate会调用setContentView(R.layout.xxx),Activity启动过程与window的源码流程可参考

总结几个步骤:

1、创建Activity:ActivityThread的performLaunchActivity函数中创建Activity后,调用Activity.attach函数

2、创建PhoneWindow:Activity.attach函数中创建与之关联的PhoneWindow,PhoneWindow会创建DectorView。

3、添加视图:setContentView添加到PhoneWindow的DectorView中

4、关联PhoneWindow到WMS中:ActivityThread实行完performLaunchActivity,会handleResumeActivity,走到Activity的onResume,

然后设置Activity的PhoneWindow的type类型:

r.window = r.activity.getWindow();

View decor = r.window.getDecorView();

decor.setVisibility(View.INVISIBLE);

ViewManager wm = a.getWindowManager();

WindowManager.LayoutParams l = r.window.getAttributes();

a.mDecor = decor;

l.type = WindowManager.LayoutParams.TYPE_BASE_APPLICATION;//

l.softInputMode |= forwardBit;

,再把这个DectorView通过WindowManagerImpl-àWindowManagerGlobalàViewRootImplà(binder)WMS中的Session的addToDisplay.

我们看下l.type = WindowManager.LayoutParams.TYPE_BASE_APPLICATION;

WindowManager.java:

/**

  * Window type: an application window that serves as the "base" window

  * of the overall application; all other application windows will

  * appear on top of it.

  * In multiuser systems shows only on the owning user's window.

*/

 

  public static final int TYPE_BASE_APPLICATION   = 1;

应用程序的window

二、Dialog显示View:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

        builder.setMessage("Message部分");

        builder.setTitle("Title部分");

        builder.setView(R.layout.dialog_main);

        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
   

            @Override

            public void onClick(DialogInterface dialog,<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值