iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android开发中setContentView和inflate的区别分析
  • 818
分享到

Android开发中setContentView和inflate的区别分析

android开发Android 2022-06-06 08:06:35 818人浏览 八月长安
摘要

本文实例讲述了Android开发中setContentView和inflate的区别。分享给大家供大家参考,具体如下: 一般用LayoutInflater做一件事:inflat

本文实例讲述了Android开发中setContentView和inflate的区别。分享给大家供大家参考,具体如下:

一般用LayoutInflater做一件事:inflate

inflate这个方法总共有四种形式(见下面),目的都是把xml表述的layout转化为View对象。

其中有一个比较常用,View inflate(int resource, ViewGroup root),另三个,其实目的和这个差不多。

int resource,也就是resource/layout文件在R文件中对应的ID,这个必须指定。

而ViewGroup root则可以是null,null时就只创建一个resource对应的View,不是null时,会将创建的view自动加为root的child。

setContentView和inflate区别:

setContentView()一旦调用, layout就会立刻显示UI;而inflate只会把Layout形成一个以view类实现成的对象,有需要时再用setContentView(view)显示出来

一般在activity中通过setContentView()将界面显示出来,但是如果在非activity中如何对控件布局设置操作了,这需LayoutInflater动态加载


<TextView
android:id="@+id/tview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ATAAW.COM"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/button"
android:text="按钮"
/>

在程序中动态加载以上布局。


LayoutInflater flater = LayoutInflater.from(this);
View view = flater.inflate(R.layout.example, null);

获取布局中的控件。


button = (Button) view.findViewById(R.id.button);
textView = (TextView)view.findViewById(R.id.tview);

接下来结合源码说说inflate方法的四种形式:

inflate方法总共有四种形式,把xml表达的layout转化为view. This class is used to instantiate layout xml files into its corresponding view object. It is never be used directly——use getLayoutInflater() or getSystemService(String)getLayoutInflate() or getSystemService(String) to retrieve a standard LayoutInflater instance that is already hooked up that is already hook up to the current context and correct configured for the device you are running on.

1. Context.public abstract object getSystemService(String name)

2. 两种获得LayoutInflater的方法

a. 通过SystemService获得

代码如下:LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLEATER_SERVICE);

b. 从给定的context中获取


Public static LayoutInflater from(Context context)

c. 两者的区别:实际上是一样的,源码



  public static LayoutInflater from(Context context) {
    LayoutInflater LayoutInflater =
        (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (LayoutInflater == null) {
      throw new AssertionError("LayoutInflater not found.");
    }
    return LayoutInflater;
}

3. LayoutInflater.inflate()将Layout文件转换为View,专门供Layout使用的Inflater。虽然Layout也是View的子类,但在android中如果想将xml中的Layout转换为View放入.java代码中操作,只能通过Inflater,而不能通过findViewById()。

4.


LinearLayout linearLayout =
(LinearLayout) findViewById(R.id.placeslist_linearlayout);
linearLayout.addView(place_type_text);

5. findViewById有两种形式

R.layout.xx是引用res/layout/xx.xml的布局文件(inflate 方法),R.id.xx是引用布局文件里面的组件,组件的id是xx(findViewById方法)。所有的组件id都能用R.id.xx来查看,但是组件不在setContentView()里面的layout中就无法使用,Activity.findViewById()会出现空指针异常

a. activity中的findViewById(int id)

b. View 中的findViewById(int id)

6.不同点是LayoutInflater是用来找layout下xml布局文件,并且实例化!而findViewById()是找具体xml下的具体 widget控件(如:Button,TextView等)

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android编程之activity操作技巧总结》、《Android视图View技巧总结》、《Android操作sqlite数据库技巧总结》、《Android操作JSON格式数据技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

您可能感兴趣的文章:浅析Android Dialog中setContentView()方法深入解析Android中的setContentView加载布局原理


--结束END--

本文标题: Android开发中setContentView和inflate的区别分析

本文链接: https://www.lsjlt.com/news/24786.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mybatis中${}和#{}取值的区别分析
    mybatis作为一个轻量级的ORM框架,应用广泛,其上手使用也比较简单;一个成熟的框架,必然有精巧的设计,值得学习。 在使用mybatis框架时,在sql语句中获取传入的参数有如下...
    99+
    2024-04-02
  • springboot和ssm开发的区别
    springboot和ssm开发的区别1. Springboot是什么.谈springboot之前,咱们要先说一下传统的SSM开发,使用过SSM开发的人都会发现,传统的SSM框架项目会有大量的配置文件,需要手动的区整合三个框架,也...
    99+
    2023-06-02
  • 分析 Vue 中的 computed 和 watch 的区别
    目录一、computed介绍1.1、get 和 set 用法 1.2、计算属性缓存二、watch介绍三、两者区别3.1、对于 computed3.2、对于 watch四、应...
    99+
    2024-04-02
  • golang 游戏开发和web开发的区别
    在游戏开发中,go语言强调并发性,而web开发注重处理并发的http请求。此外,游戏开发需要手动内存管理以避免帧丢失或卡顿,而web开发可以使用垃圾回收器。 Go 语言在游戏开发和 W...
    99+
    2024-04-21
    css golang 网络编程 垃圾回收器 标准库
  • 分析ES5和ES6的apply区别
    目录概述函数签名可选参数非严格模式异常处理实际使用总结概述 众所周知, ES6 新增了一个全局、内建、不可构造的Reflect对象,并提供了其下一系列可被拦截的操作方法。其中一个便是...
    99+
    2024-04-02
  • app原生开发和非原生开发的区别
    一、开发语言不同 原生开发:原生应用开发指的是使用像Java(安卓)、Swift或Objective-C(iOS)这样的语言来进行开发。这些语言是由各自的操作系统开发商提供的,开发出的应用程序能够更好地利用系统的资源和功能。 非...
    99+
    2023-10-29
    区别 app
  • MongoDB和mysql的区别对比分析
    目录一.什么是MongoDB二.什么是Mysql三,区别一.什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写,是一个开源数据库系统。旨在为...
    99+
    2023-01-31
    MongoDB和mysql的区别 MongoDB mysql区别
  • 浅析Mysql和Oracle分页的区别
    目录mysql使用limit进行分页oracle使用rownum进行分页Mysql与Oracle级联查询Mysql省市区级联查询Mysql与Oracle插入数据存在修改不存在新增MySQL使用limit进行分页 sele...
    99+
    2022-12-07
    Mysql和Oracle分页区别 MysqlOracle分页
  • JavaScript中? ?、??=、?.和 ||的区别浅析
    目录前言 与 || 的区别空值合并操作符 可选链操作符 . 空值赋值运算符(=)补充:. 链判断运算符总结前言 undefined和null是两个比较特...
    99+
    2022-11-13
    js ?.和 ||区别 js ?.是什么意思 js 空值合并操作符
  • Java中List.of()和Arrays.asList()的区别及原因分析
    目录Java中List.of()和Arrays.asList()的区别及原因1.Arrays.asList()可以插入null2.用List.of的List自然是不包含null3.L...
    99+
    2024-04-02
  • 怎么分析cookie和session的区别
    这篇文章给大家介绍怎么分析cookie和session的区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1,cookie保存在浏览器(客户端)中,服务器知道数据,cookie可以通过工具随意修改,不安全2,Sessi...
    99+
    2023-06-04
  • 浅析Oracle和Mysql分页的区别
    一、Mysql使用limit分页 select * from stu limit m, n; //m = (startPage-1)*pageSize,n = pageSize ...
    99+
    2024-04-02
  • 如何分析bootstrap和vue的区别
    今天就跟大家聊聊有关如何分析bootstrap和vue的区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。区别:1、Bootstrap是基于HTML...
    99+
    2024-04-02
  • 移动前端开发和Web前端开发的区别
    一、技术栈的区别 Web前端开发:Web前端开发主要使用HTML、CSS、JavaScript等技术进行开发,通常还会使用Vue、React、Angular等前端框架来提高开发效率。 移动前端开发:移动前端开发除了使用H...
    99+
    2023-10-29
    区别 Web
  • Android Studio开发之JNI的示例分析
    这篇文章主要介绍了Android Studio开发之JNI的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言Android上层应用使用java开发,不过java并不...
    99+
    2023-05-30
    android studio jni
  • Hive中的动态分区和静态分区的区别
    Hive中的动态分区和静态分区是两种不同的分区方式,它们的区别在于分区的创建和管理方式。 静态分区:静态分区是在创建表时就定义好的...
    99+
    2024-03-12
    Hive
  • Android开发之拖动条和评分组件用法分析
    本文实例讲述了Android开发之拖动条和评分组件用法。分享给大家供大家参考,具体如下:今天闲着没事做就拿出了Android书接着学习,android就是组件多有时候还会弄混淆了。这次介绍的是拖动条和评分组件,这2个组件也是超级简单的下面就...
    99+
    2023-05-30
    android 拖动条 评分组件
  • SpringBoot深入分析webmvc和webflux的区别
    目录1、webmvc2、webflux3、webflux实例4、小结webmvc和webflux作为spring framework的两个重要模块,代表了两个IO模型,阻塞式和非阻塞...
    99+
    2023-02-02
    SpringBoot webmvc和webflux SpringBoot webmvc SpringBoot webflux
  • H5 canvas中width、height和style的宽高区别分析
    小编给大家分享一下H5 canvas中width、height和style的宽高区别分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Canvas 的width height属性当使用width height属性时,显示正...
    99+
    2023-06-09
  • 如何分析vue中v-bind和v-model的区别
    如何分析vue中v-bind和v-model的区别,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。区别:1、“v-bind”是单向绑定,而“...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作