`
263229365
  • 浏览: 473550 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Activity是如何生成一个 view 的

 
阅读更多

Activity是一个工人,它来控制Window;Window是一面显示屏,用来显示信息;View就是要显示在显示屏上的信息,这些View 都是层层重叠在一起(通过infalte()和addView())放到Window显示屏上的。而LayoutInfalter就是用来生成View的 一个工具,XML布局文件就是用来生成View的原料

 

再来说说代码中具体的执行流程

 

setContentView(R.layout.main)其实就是下面内容。(注释掉本行执行下面的代码可以更直观)

 

getWindow().setContentView(LayoutInflater.from(this).inflate(R.layout.main, null))

 

即 运行程序后,Activity会调用PhoneWindow的setContentView()来生成一个Window,而此时的 setContentView就是那个最底层的View。然后通过LayoutInflater.infalte()方法加载布局生成View对象并通过 addView()方法添加到Window上,(一层一层的叠加到Window上)

 

所以,Activity其实不是显示视图,View才是真正的显示视图

 

注: 一个Activity构造的时候只能初始化一个Window(PhoneWindow),另外这个PhoneWindow有一个”ViewRoot”,这 个”ViewRoot”是一个View活ViewGroup,是最初始的跟视图,然后通过addView方法将View一个个层叠到ViewRoot上, 这些层叠的View最终放在Window这个载体上面

分享到:
评论

相关推荐

    android 获取界面部分view,view截图,生成bitmap图片

    首先创建一个与View大小相同的Bitmap,然后创建一个与Bitmap关联的Canvas,最后调用View的`draw(Canvas)`方法将View的内容绘制到Canvas上。以下是一个简单的示例代码: ```java View view = findViewById(R.id....

    Activity中用代码动态加载布局

    3. 添加到父视图:如果你想要将这个动态加载的布局添加到Activity的根布局(例如一个LinearLayout),则需要指定父视图并调用其`addView()`方法: ```java LinearLayout parentLayout = findViewById(R.id.parent_...

    android触屏事件之activity,view,viewgroup

    总结来说,Android中的触屏事件处理是一个复杂而有序的过程,涉及到Activity、View和ViewGroup的协同工作。理解这个过程对于优化用户体验和实现复杂的交互功能至关重要。通过熟练掌握这些知识,开发者能够创建出更加...

    demo教你如何实现同一个activity加载不同的fragment 同时实现activity和fragment之间的数据交换

    首先,需要一个二维码生成库,如Zxing。创建二维码后,将其绘制到自定义View的Canvas上。 在实际项目中,可能还需要考虑Fragment的生命周期管理,确保在适当的时候保存和恢复状态,以及处理用户交互事件。同时,...

    随意调节你的activity的大小,activity 自定义窗口大小

    通过以上步骤,你可以在应用中创建一个可自由调整大小的Activity,为用户提供更加个性化的交互体验。不过,请注意,这样的功能可能会增加应用的复杂性,所以在实际开发中需要权衡利弊,确保用户体验和系统稳定性。

    Android-仿微信滑动销毁activity获取view绘制区域

    在Android应用开发中,微信的滑动销毁Activity功能是一个非常受欢迎的设计,它为用户提供了流畅且直观的交互体验。这个特性使得用户可以通过在屏幕边缘向上滑动来关闭当前的Activity,模仿了微信应用中的行为。要...

    android native activity项目

    本项目"android native activity"提供了创建和运行一个基本Native Activity的实例,适合对Android原生编程感兴趣的开发者学习。 首先,Native Activity是Android系统框架的一部分,由Android的libnative_activity....

    截取View转为图片

    在Android开发中,有时我们需要将一个View转换成图片进行保存或者分享,比如截图、制作预览图等。这个过程涉及到的主要知识点是View的绘制和Bitmap的处理。下面将详细讲解如何实现这一功能。 首先,我们要了解`View...

    安卓activity签字签名

    你可以创建一个自定义View,继承自View或SurfaceView,处理触摸事件,记录轨迹并生成签名图像。同时,你需要实现文件保存逻辑,包括路径选择、文件命名、权限处理和错误处理。 5. **TestSign**: 这可能是项目的...

    点击按钮activity之间随机的跳转,为按钮添加音乐

    在Android应用开发中,"点击按钮activity之间随机的跳转,为按钮添加音乐"是一个常见的需求,这涉及到多个关键知识点,包括Activity之间的交互、事件监听、随机数生成以及媒体播放。接下来,我们将深入探讨这些核心...

    3.5 Activity和Intent(多个Activity之间的跳转)

    Intent是一个动作的完整描述,包含了动作的产生组件、接收组件和传递的数据信息。一个Intent对象包含一组信息:Component name、Action、Data、Category、Extras、Flags等。其中,Component name是要处理这个Intent...

    Android学习之Activity弹窗

    创建PopupWindow需要创建一个View,然后实例化PopupWindow对象并传入这个View,最后调用showAsDropDown()或showAtLocation()方法定位并显示弹窗。 在实际开发中,我们还会遇到其他的弹窗形式,如Toast(短暂提示...

    activity跳转动画效果

    共享元素动画允许我们在两个Activity之间平滑过渡一个或多个UI元素,增加连贯性。 2. **XML动画定义**:Android的动画效果主要通过XML文件定义,存储在`res/anim`目录下。比如,我们可以创建一个`slide_in_left.xml...

    android根据layout文件生成activity及自动注册 Demo

    例如,如果一个layout文件包含了一个id为"button1"的Button,自动生成的Activity可能会有如下代码: ```java public class AutoGeneratedActivity extends AppCompatActivity { @Override protected void ...

    activity切换翻转效果

    总的来说,"activity切换翻转效果"是Android开发中的一个高级技巧,它结合了Intent、动画资源和自定义布局,为用户提供了更具沉浸感的交互体验。熟练掌握这种方法,能让你的应用在众多竞品中脱颖而出。

    Activity间图片传递(3种方法)

    对于非资源图片,我们可以将其转换为Bitmap,然后序列化成一个字节数组传递。发送Activity: ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image); ByteArrayOutputStream...

    andriod开发之Activity的渲染机制

    PhoneWindow的`setContentView`方法会进一步调用`installDecor`,在这里,如果`mDecor`(DecorView)为空,那么会生成一个DecorView。DecorView是一个特殊的FrameLayout,它是所有Activity的根视图,用来承载应用的...

    android activity 动画切换

    这个方法需要两个整型参数:一个用于进入动画,另一个用于退出动画。这两个参数可以是预定义的资源ID,也可以是我们自定义的动画资源ID。 预定义动画资源ID包括: - `R.anim.slide_in_left`:从左滑入 - `R.anim....

    android项目下对图片高斯模糊毛玻璃自定义view

    本项目旨在教你如何在Android项目中创建一个自定义View,用于实现高斯模糊和毛玻璃效果,并且允许开发者自定义模糊程度。以下是关于这个主题的详细讲解。 一、高斯模糊原理 高斯模糊是一种图像处理技术,通过对图像...

    Android中父View和子view的点击事件

    如果子View不消耗事件(即不处理或返回false),事件会回传给父View,直到找到一个处理事件的View或者事件被完全消耗。 三、点击事件处理 1. `OnClickListener`:这是最常用的处理点击事件的方式。为View设置...

Global site tag (gtag.js) - Google Analytics