android 如何获得activity的view对象,Android的Activity 、 Window 、 View之间的关系

本文详细探讨了Android中的Activity、View和Window三者的关系。Activity是界面载体,通过SetContentView方法设置布局,实际调用了Window的同名方法。Window是一个抽象类,其唯一实例PhoneWindow负责显示策略。View是界面元素,可以是多种控件。Activity通过PhoneWindow的setContentView()方法将布局加载到DecorView,DecorView是Window内容的承载者。整个过程涉及Activity的attach方法、PhoneWindow的创建和安装布局的过程。
摘要由CSDN通过智能技术生成

什么是Activity 、View 、 Window?

Activity:是Android 四大组件之一, 是存放View对象的容器,也是我们界面的载体,可以用来展示一个界面。它有一个SetContentView()方法 ,可以将我们定义的布局设置到界面上。

View:就是一个个视图的对象,实现了KeyEvent.Callback和Drawable.Callback。

Window:是一个抽象类,是一个顶层的窗口,它的唯一实例是PhoneWindow它提供标准的用户界面策略,如背景、标题、区域,默认按键处理等。

分析下三者之间的关系吧

iew包含很多,TextView 、Imageview 、Listview 、 Button..就是一个一个展示不同图形的对象。我们可以把view通过xml布局,或者通过new View(),然后通过addview方法或动态或静态添加到Activity的布局上。我们都知道我们定义了layout布局,通过SetContentView就可以设置到Activity上,而Activity中的SetContentView()方法,又调用了Window的SetContentView方法,也就是View通过Activity最终添加到了Window上面。

那我们今天就看一下这个方法到底如何把layout布局加载进去,到底加载到哪里去了?

/**

* Set the activity content from a layout resource. The resource will be

* inflated, adding all top-level views to the activity.

*

* @param layoutResID Resource ID to be inflated.

*

* @see #setContentView(android.view.View)

* @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams)

*/

public void setContentView(@LayoutRes int layoutResID) {

getWindow().setContentView(layoutResID);

initWindowDecorActionBar();

}

面注释写的很清楚,通过一个layout资源给Activity设置内容,资源将被添加到Activity最顶层的View上也就是调用了方法体中的getWindow().set方法,首先这里getWindow() 拿到的是一个Window的子类,PhoneWindow的实例,那么这个Window对象是在哪里 赋值的呢,我们在Activity中找到attach方法如下所示:

final void attach(Context context, ActivityThread aThread,

Instrumentation instr, IBinder token, int ident,

Application application, Intent intent, ActivityInfo info,

CharSequence title, Activity parent, String id,

NonConfigurationInstances lastNonConfigurationInstances,

Configuration config, String referrer, IVoiceInteractor voiceInteractor) {

attachBaseContext(context);<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值