一、首先说说View和ViewGroup吧
Android系统中的所有UI类都是建立在View和ViewGroup这两个类的基础上的。所有View的子类成为”Widget”,所有ViewGroup的子类成为”Layout”。View和ViewGroup之间采用了组合设计模式,可以使得“部分-整体”同等对待。ViewGroup作为布局容器类的最上层,布局容器里面又可以有View和ViewGroup。
二、LayoutInflater,LayoutInflater.inflate()这两个是什么意思?
LayoutInflater是一个用来实例化XML布局文件为View对象的类
LayoutInflater.infalte(R.layout.test,null)用来从指定的XML资源中填充一个新的View
三、Activity、Window、View之间的关系
而当我们运行程序的时候,有一个setContentView()方法,Activity其实不是显示视图(直观上感觉是它),实际上Activity调用了PhoneWindow的setContentView()方法,然后加载视图,将视图放到这个Window上,而Activity其实构造的时候初始化的是Window(PhoneWindow),Activity其实是个控制单元,即可视的人机交互界面。
打个比喻:
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这个载体上面
分享到:
相关推荐
WindowManager mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams( ViewGroup.LayoutParams.WRAP_...
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); ``` 然后,我们需要定义一个布局文件,例如`floating_view.xml`,作为悬浮视图的UI结构。在这个布局文件中,你可以包含...
PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); ``` 接着,为了在指定的View上方或下方显示PopupWindow,我们需要计算出...
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); windowManager.addView(LayoutInflater.from(this).inflate(R.layout.float_ms, null), params); ``` 这里,`TYPE_PHONE`或`TYPE...
然而,在Android开发中,我们通常不直接使用AWT,因为Android有自己的视图系统,如View和 ViewGroup,它们更适应移动设备的特性和交互方式。AWT在Android中的存在可能意味着这个小游戏可能是移植自Java桌面应用,...
在Android中,所有的UI元素都可以被视为View或ViewGroup的实例。例如,一个Activity的主界面通常由一个名为DecorView的ViewGroup构成,而DecorView本身继承自FrameLayout,进一步继承自ViewGroup。 ##### 2.2 UI ...
### Android的Window类详解 #### 一、概述 在Android系统中,`Window`类扮演着极其重要的角色,它是应用程序与用户交互的主要界面之一。本文将深入探讨Android中的`Window`类及其相关特性,帮助开发者更好地理解其...
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); wm.addView(view, params); ``` 为了实现悬浮窗的移动和拖拽功能,你需要监听触摸事件,更新`LayoutParams`的坐标,并调用`...
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); // 设置布局参数 windowManager.addView(your...
WindowView是一款专为Android平台设计的强大视图库,它的源码为我们提供了深入理解Android UI机制、自定义View以及动画效果实现的机会。通过分析这个开源项目,开发者可以学习到许多关于Android开发的重要知识点。 ...
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); LayoutInflater inflater = LayoutInflater.from(this); View floatingView = inflater.inflate(R.layout.float_view, null); ...
ViewGroup作为View的容器,它不仅包含多个子View,还负责管理这些子View的事件处理。事件分发涉及到MotionEvent的生命周期以及ViewGroup如何决定事件传递的方向。 MotionEvent是Android中表示触控事件的对象,包含...
通过`Context.getSystemService(Context.WINDOW_SERVICE)`获取`WindowManager`实例。 4. **设置LayoutParams**:为你的View创建一个`WindowManager.LayoutParams`对象。设置其类型为`TYPE_SYSTEM_ALERT`,这允许你...
floatingView = inflater.inflate(R.layout.floating_window_layout, null); // 配置悬浮窗参数 WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams( ViewGroup.LayoutParams.WRAP_...
在Android系统中,Window并非直接与用户界面的View元素等价,而是作为承载View的容器。本文将深入探讨Android中Window添加View的底层原理,包括Window和WindowManager的概念、交互方式以及添加View的关键步骤。 ...
本压缩包提供的资料是关于如何在Android系统中实现夜间模式的一种方法,即通过在窗口(Window)上添加一层半透明的View来达到效果。下面将详细阐述这一实现方式。 首先,理解Android窗口(Window)的概念至关重要。...
View floatView = getLayoutInflater().inflate(R.layout.float_window_layout, null); windowManager.addView(floatView, layoutParams); ``` 对于悬浮窗的交互,比如移动和关闭,可以通过监听Button的点击事件来...
5. **UI框架**:包括View和 ViewGroup体系,它们构成了Android界面的基本元素。`View`类提供了基本的绘图和事件处理能力,`ViewGroup`则负责布局管理。 6. **Content Provider**:数据共享机制,允许不同应用之间...
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); LayoutParams layoutParams = new WindowManager.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup....