警告:这个<FrameLayout>可以被replace为一个<merge>标签

我有一个FrameLayout包含一个TextView和两个LinearLayout

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > ... a textview and 2 linearlayouts </FrameLayout> 

运行Android Lint后,我得到这个警告: This <FrameLayout> can be replaced with a <merge> tag.

为什么这个警告存在? 我能做些什么来解决它(忽略)?

Solutions Collecting From Web of "警告:这个<FrameLayout>可以被replace为一个<merge>标签"

为了理解这一点,你需要了解布局如何膨胀和放置。

比方说,你有一个活动,这是你使用的布局xml。 在放置布局文件之前,以下是活动的布局。

 <FrameLayout // This is the window ... <FrameLayout> // This is activity </FrameLayout> </FrameLayout> 

根据设备/操作系统,可能还有其他几个层。

现在,当你膨胀你的布局文件,并将其放入,这是它的外观。

 <FrameLayout // This is the window ... <FrameLayout> // This is activity // Your layout below <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > ... a textview and 2 linearlayouts </FrameLayout> </FrameLayout> </FrameLayout> 

你看到FrameLayout里面的FrameLayout? 这是多余的,因为它不会增加太多的价值。 为了优化,你可以用一个<merge>replace你的FrameLayout。 如果你使用,这就是它的样子。

 <FrameLayout // This is the window ... <FrameLayout // This is activity // Your layout below ... a textview and 2 linearlayouts </FrameLayout> </FrameLayout> 

注意如何没有额外的FrameLayout。 相反,它只是与活动的FrameLayout合并。 只要你可以,你应该使用<merge>。 这不仅适用于FrameLayouts。 你可以在这里读更多关于它的内容。 http://developer.android.com/training/improving-layouts/reusing-layouts.html#Merge

希望这可以帮助。

您是否将此作为您活动的主要布局? 如果是这样,你可以用这样的合并标签replace它:

 <merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > ... a textview and 2 linearlayouts </merge> 

setContentView ,Android将采用合并标记的子setContentView ,并直接使用@android:id/content将它们插入到FrameLayout 。 检查两种方法( FrameLayout vs merge )与HierarachyViewer看到的差异。

请参阅Romain Guy的这篇文章以获取更多信息。 它告诉你为什么build议合并选项。