如何预览自定义Android组件布局?

时间:2012-09-20 16:55:55

标签: android xml layout adt custom-component

我创建了一个扩展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>

然而,这有一些问题:

  1. 这实际上会在RelativeLayout内创建RelativeLayout,这是毫无意义的。可以通过将XML <RelativeLayout>更改为<merge>来解决,但我根本无法预览布局!
  2. 我想在java中使用isInEditor()函数(或其中的任何函数)来添加一些示例数据以供预览,但我找不到告诉XML编辑器它应该显示的方法我的类的预览,而不是实际的XML。
  3. 我能想到的一个令人不满意的解决方案是创建一个只有preview.xml的空<com.foo.bar.MyView/>文件......但这看起来有些愚蠢。有没有更好的办法? (我并不像预览那样关心编辑,因为 - 让我们面对现实 - Eclipse / ADT太慢而且片状不足以使图形布局编辑可用。)

1 个答案:

答案 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的行为方式(因为您也可以覆盖父方法等)。