假设我们正在开发基于 LinearLayout 的复合组件。所以,我们创建这样的类:
public class SomeView extends LinearLayout { public SomeView(Context context, AttributeSet attrs) { super(context, attrs); setOrientation(LinearLayout.VERTICAL); View.inflate(context, R.layout.somelayout, this); } }
如果我们将LinearLayout用作 的根somelayout.xml,我们将有额外的视图级别,所以我们使用合并标签:
LinearLayout
somelayout.xml
<?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Some text" android:textSize="20sp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Some other text"/> </merge>
但在 IDE 合并的 Preview 选项卡中,始终充当 FrameLayout,我们会看到类似的内容:
(就是Android Studio,Intellij IDEA也一样,关于Eclipse我不知道)
预览大大加快了布局的开发速度,即使对于某些布局也失去了如此大的帮助,这很可悲。可能有一种方法可以指定,预览应该如何解释merge特定布局中的标签?
merge
有一个新的 parentTag 工具属性(在 Android Studio 2.2 中添加),您可以使用它来指定合并标签的布局类型,这将使布局在布局编辑器预览中正确呈现。
所以使用你的例子:
<merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:parentTag="LinearLayout" tools:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Some text" android:textSize="20sp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Some other text"/> </merge>
注意 :必须同时指定 和 才能使布局在编辑器中正确显示android:layout_width。android:layout_height
android:layout_width
android:layout_height