306

我是 android 开发的新手,并且不断从布局 xml 文件中看到对 Inflating 视图的引用。我用谷歌搜索并搜索了开发指南,但仍然无法理解它的含义。如果有人可以提供一个非常简单的示例,将不胜感激。

4

7 回答 7

275

当您编写 XML 布局时,它会被Android 操作系统膨胀,这基本上意味着它将通过在内存中创建视图对象来呈现。我们称之为隐式膨胀(操作系统会为您膨胀视图)。例如:

class Name extends Activity{
    public void onCreate(){
         // the OS will inflate the your_layout.xml
         // file and use it for this activity
         setContentView(R.layout.your_layout);
    }
}

您还可以使用LayoutInflater. 在这种情况下,您必须:

  1. 获取一个实例LayoutInflater
  2. 指定要扩展的 XML
  3. 使用返回的View
  4. 使用返回的视图设置内容视图(上图)

例如:

LayoutInflater inflater = LayoutInflater.from(YourActivity.this); // 1
View theInflatedView = inflater.inflate(R.layout.your_layout, null); // 2 and 3
setContentView(theInflatedView) // 4
于 2011-01-01T23:45:39.553 回答
174

“膨胀”视图意味着获取布局 XML 并对其进行解析,以根据其中指定的元素及其属性创建视图和视图组对象,然后将这些视图和视图组的层次结构添加到父视图组。当您调用 setContentView() 时,它会将通过读取 XML 创建的视图附加到活动。您还可以使用 LayoutInflater 将视图添加到另一个 ViewGroup,这在很多情况下都是一个有用的工具。

于 2011-01-01T23:54:45.960 回答
39

膨胀是在运行时将视图 (.xml) 添加到活动的过程。当我们创建一个 listView 时,我们会动态地膨胀它的每个项目。如果我们想创建一个具有多个视图(如按钮和文本视图)的 ViewGroup,我们可以这样创建它:

Button but = new Button();
but.setText ="button text";
but.background ...
but.leftDrawable.. and so on...

TextView txt = new TextView();
txt.setText ="button text";
txt.background ... and so on...

然后我们必须创建一个布局,我们可以在其中添加上面的视图:

RelativeLayout rel = new RelativeLayout();

rel.addView(but);

现在如果我们想在右上角添加一个按钮,在底部添加一个textview,我们必须做很多工作。首先通过实例化视图属性,然后应用多个约束。这很耗时。

Android 让我们可以轻松地创建一个简单的 .xml 并在 xml 中设计其样式和属性,然后在需要的地方简单地对其进行扩展,而无需以编程方式设置约束。

LayoutInflater inflater = 
              (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View menuLayout = inflater.inflate(R.layout.your_menu_layout, mainLayout, true);
//now add menuLayout to wherever you want to add like

(RelativeLayout)findViewById(R.id.relative).addView(menuLayout);
于 2014-11-05T10:40:24.280 回答
6

我认为这里“膨胀视图”是指获取 layout.xml 文件,绘制在该 xml 文件中指定的视图,并使用创建的视图填充(=膨胀)父视图组。

于 2015-07-21T11:54:44.483 回答
6

通货膨胀的外行定义可能是将 XML 代码转换为 Java 代码。只是一种理解方式,例如,如果我们在 XML 中有一个标签,OS 必须在内存中创建一个相应的 Java 对象,所以 inflatter 读取 XML 标签,并在 Java 中创建相应的对象。

于 2019-10-25T03:24:04.203 回答
3

因为我们将 UI 转换为 XML,但我们显示的是视图对象,所以我们需要以某种方式将 xml 转换为视图对象,所以膨胀意味着我们将 xml 转换为视图对象以便它可以显示,为此我们需要一个称为布局充气器服务的服务并给它一个xml,它将为您转换。

于 2017-04-21T05:54:31.900 回答
1

iOS UIKit世界中,这意味着获取对.Xib(它是 XML,就像 android)文件的引用并将其添加到当前 ViewController 的视图层次结构中。

于 2021-05-13T19:56:28.460 回答