我创建了一个扩展RelativeLayout
的自定义视图,我希望预览它在设计器中的外观。
java是这样的:
// The view for a snap in the search/browse fragment.
public class MyView extends RelativeLayout
{
public MyView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.the_layout, this);
}
public void setData(String text)
{
mText.setText(text);
}
// *** Views ***
private TextView mText;
@Override
protected void onFinishInflate()
{
super.onFinishInflate();
mText = (TextView)findViewById(R.id.text);
}
}
XML就像这样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- (And lots more views) -->
</RelativeLayout>
然而,这有一些问题:
RelativeLayout
内创建RelativeLayout
,这是毫无意义的。可以通过将XML <RelativeLayout>
更改为<merge>
来解决,但我根本无法预览布局!isInEditor()
函数(或其中的任何函数)来添加一些示例数据以供预览,但我找不到告诉XML编辑器它应该显示的方法我的类的预览,而不是实际的XML。我能想到的一个令人不满意的解决方案是创建一个只有preview.xml
的空<com.foo.bar.MyView/>
文件......但这看起来有些愚蠢。有没有更好的办法? (我并不像预览那样关心编辑,因为 - 让我们面对现实 - Eclipse / ADT太慢而且片状不足以使图形布局编辑可用。)
答案 0 :(得分:1)
如果我理解你的问题,我会说解决办法就是用你的xml布局中的“your.packagename.MyView”替换“RelativeLayout”标签(或任何其他标签),如下所示:
<your.packagename.MyView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- (And lots more views) -->
</your.packagename.MyView>
如果您在运行应用程序时遇到有关MyView类的任何异常,请添加所有缺少的超级/父级构造函数。
我几乎为所有自定义xml布局执行此操作。使用RelativeLayout,LinearLayout或任何其他GUI类扩展您的类也可以很好地控制GUI的行为方式(因为您也可以覆盖父方法等)。