`
windy721
  • 浏览: 3394 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类

[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. 两者的区别:实际上是一样的,源码
/**
     * Obtains the LayoutInflater from the given context.
     */
    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等)。

分享到:
评论
1 楼 Riddick 2012-04-10  
布局有点乱

相关推荐

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

    通常,我们有两种方式来加载和展示布局:`setContentView()` 和 `inflate()`。这两者在功能和使用场景上有所区别,理解它们的不同可以帮助开发者更有效地进行界面构建。 首先,`setContentView()` 是一个 Activity ...

    使用代码编写Android界面布局源代码

    本主题将深入探讨如何使用代码编写Android界面布局源代码,以帮助开发者更好地理解和实践这一过程。 首先,Android界面通常由XML布局文件定义,但也可以通过编程方式动态创建。这种方式适用于那些需要在运行时根据...

    android利用viewPager和Fragment实现典型的选项卡界面

    在Android应用开发中,创建一个典型的选项卡界面是常见的需求,可以为用户提供多视图的交互体验。`ViewPager`和`Fragment`是Android SDK提供的强大工具,能够帮助开发者轻松实现这一功能。本教程将深入讲解如何利用...

    android 评论页面listview实现

    在Android应用开发中,ListView是展示大量数据列表的常用组件,尤其在评论页面的实现上,它能够有效地滚动和管理视图,节省内存资源。本示例将详细讲解如何在Android中实现一个评论页面,利用ListView展示用户留言。...

    界面布局实例

    在Android开发中,界面布局是构建用户交互界面的关键部分,它定义了应用中各个组件的排列方式和相互关系。本实例将深入探讨如何创建和管理一个简单的界面布局。我们将主要关注以下几个方面: 1. **XML布局文件**:...

    (1)android标签切换界面

    `FragmentTabHost`和`Fragment`的组合使用,使得在Android应用中构建复杂、动态的用户界面变得更加简单和灵活。 在`FragmentTabHostExample-master`这个压缩包文件中,应该包含了完整的示例代码,包括`MainActivity...

    Android 对话框界面

    在本文中,我们将深入探讨如何自定义登录界面对话框和创建带进度条的对话框。 ### 一、自定义登录界面对话框 自定义登录对话框通常用于提供一个轻量级的界面,让用户输入用户名和密码,而无需跳转到新的Activity。...

    Android应用中使用ViewPager实现类似QQ的界面切换效果

    本文将详细介绍如何在Android应用中使用ViewPager实现类似QQ的界面切换效果,并解决在使用ViewPager和PagerAdapter时可能出现的notifyDataSetChanged失效问题。 首先,我们需要理解ViewPager的基本用法。ViewPager...

    android studio 源码AndroidViewModel(让ViewModel访问全局资源);视图绑定;

    `AndroidViewModel`是Android架构组件库的一部分,设计用于在应用程序的不同界面之间共享数据和业务逻辑。这个类扩展自`ViewModel`,并添加了对`Application`上下文的访问权限,这意味着`AndroidViewModel`可以方便...

    Android Fragment简单应用

    在Android开发中,Fragment是应用程序界面的一个可重用组件,它可以在Activity中承载用户界面的各个部分。Fragment的概念引入是为了让开发者能更好地处理大屏幕设备,如平板电脑,同时也可以在手机等小屏幕设备上...

    android任务管理器(界面纯代码实现)

    在Android开发中,任务管理器(Task Manager)是一个非常重要的工具,它可以帮助用户或者开发者了解设备上正在运行的应用程序和后台服务。本示例主要讲解如何使用纯代码而非XML来实现一个简单的Android任务管理器界面...

    Android仿微信界面的导航以及右上角菜单栏效果

    Android仿微信界面的导航以及右上角菜单栏效果 Android仿微信界面的导航以及右上角菜单栏效果是Android开发中常见的UI设计样式之一,本文将详细介绍如何实现仿微信界面的导航以及右上角菜单栏效果。 一、界面编写 ...

    Android 中LayoutInflater的使用

    通过LayoutInflater,我们可以动态地在运行时加载和插入用户界面元素,这对于创建复杂的、可定制的或者根据需要改变的视图布局至关重要。 首先,我们来看一下如何使用LayoutInflater。在给定的例子中,我们有两个...

    使用Android-support-v7兼容Android 3.0以下系统使用ActionBarActivity

    `ActionBar`是Android 3.0(API Level 11)引入的一个功能强大的界面组件,提供了导航、操作和应用品牌展示等功能。但在早期版本的Android中,`ActionBar`并未被支持。为了解决这个问题,谷歌推出了`Android Support...

    Android对话框(Dialog)实例

    本文将详细讲解如何在Android中创建和使用对话框,并提供一个具体的`DialogDemo`实例来帮助理解。 一、Android对话框基础 1. 对话框类型: - 普通对话框(AlertDialog):最常用的对话框,包含标题、内容和按钮。...

    一步一步图示开发第一个Android项目并运行.doc

    ### Android项目开发与运行详解 #### 一、生成Android应用工程 在开发第一个Android项目时,需要...对于初学者而言,按照文档的指导一步步操作是非常有益的,可以帮助更好地理解Android开发的基本流程和技术要点。

    Android 基础

    Android界面主要由两个基本元素构成:`View`和`ViewGroup`。`View`是用户界面中最基本的单元,它可以是一个按钮、文本框或者图片等。而`ViewGroup`则是`View`的容器,它负责组织和管理多个`View`,例如布局...

    android编程实现局部界面动态切换的方法

    在Android开发中,局部界面动态切换是一个常见的需求,它允许用户在不离开当前界面的情况下更改显示内容。这种功能常用于导航栏、侧滑菜单或卡片式设计等。本篇文章将详细探讨如何通过编程方式实现在Android应用中...

Global site tag (gtag.js) - Google Analytics