在Intellij IDEA / Android Studio中预览具有合并根标签的布局
假设我们正在开发基于LinearLayout的复合组件。 所以,我们创build这样的类:
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
的根,我们将有额外的视图级别,所以我们使用合并标签:
<?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合并的预览选项卡中,总是充当FrameLayout,我们将看到类似这样的内容:
(这是Android Studio,Intellij IDEA是一样的,关于Eclipse我不知道)
预览加速开发布局很多,即使对于一些布局,也不会失去这么大的帮助。 可能是有一种方法来指定,如何预览应解释merge
标签在特定的布局?
有一个新的parentTag工具属性( 在Android Studio 2.2中添加 ),您可以使用它来指定合并标签的布局types,这将使布局在布局编辑器预览中正确呈现。
所以用你的例子:
<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_height
和android:layout_height
才能使布局在编辑器中正确显示。
编辑:过时的答案。 请参阅starkej2的答案。
Android Studio 0.5.8增加了对工具的支持:showIn。 通过使用它可以预览<merge>布局。
http://tools.android.com/recent/androidstudio058released
布局/ layout_merge.xml使用工具:showIn:
<merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:showIn="@layout/simple_relativelayout"> ...... </merge>
layout / simple_relativelayout.xml包含:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/layout_merge"/> </RelativeLayout>
也可以使用自定义类作为父类而不是合并类似的
<com.mycompany.SomeView xmlns:android="http://schemas.android.com/apk/res/android"> ... </com.mycompany.SomeView>
然后直接膨胀这个布局,并将结果视图SomeView
到SomeView
。 Android工作室将直接检查SomeView
父类,并像LinerLayout
一样处理预览。 您可以使用onFinishInflate()
方法通过findViewById()
来绑定视图。 这个解决scheme的好处是你可以把所有的布局定义或样式定义直接放到布局文件中,你不能在代码中使用setOrientation()
方法。
- 我应该添加到SVN的文件在使用Android Studio的项目中忽略
- Android Studio:编译器错误输出窗口在哪里?
- SDK平台工具版本((23))太旧,无法检查使用API 23编译的API
- 我的debuggingAndroidManifest.xml给我“无法解决符号错误”
- 如何运行Android Studio的多个实例
- Android Studio无法parsing导入的项目中的R?
- 如何在Android Studio中获取SHA-1指纹证书的debugging模式?
- 无法find以下类:android.support.v7.internal.app.WindowDecorActionBar
- Android Studio可以用来运行标准的Java项目吗?