0

我写了一个类扩展FrameLayout。

public class ReaderFrameLayout extends FrameLayout
{
    public ReaderFrameLayout(Context context)
    {
        this(context, null);
    }

    public ReaderFrameLayout(Context context, AttributeSet attrs)
    {
        this(context, attrs, 0);
    }

    public ReaderFrameLayout(Context context, AttributeSet attrs, int defaultStyle)
    {
        super(context, attrs, defaultStyle);
        WebView readerWebView = (WebView) findViewById(R.id.fragment_reader_webview);
        readerWebView.setOnTouchListener(new OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
                Log.d("ReaderFrameLayout", "setOnTouchListener");
                return true;
            }
        });
    }
}

并将其添加到片段中。

<RelativeLayout 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" >

    <com.mbs.helpers.ReaderFrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="83dp" >

        <WebView
            android:id="@+id/fragment_reader_webview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

    </com.mbs.helpers.ReaderFrameLayout>

</RelativeLayout>

Eclipse 中的错误:

com.android.layoutlib.bridge.MockView 无法转换为 android.view.ViewGroup 异常详细信息记录在 Window > Show View > Error Log 无法实例化以下类: - com.mbs.helpers.ReaderFrameLayout(开放类,显示错误日志)有关详细信息,请参阅错误日志(窗口 > 显示视图)。提示:当在 Eclipse 中显示时,在自定义视图中使用 View.isInEditMode() 以跳过代码

当然,该应用程序不起作用。

我究竟做错了什么?

4

1 回答 1

0

只需以编程方式创建 Web 视图:

public ReaderFrameLayout(Context context, AttributeSet attrs, int defaultStyle)
{
    super(context, attrs, defaultStyle);
    WebView readerWebView = new WebView(context);
    addView(readerWebView);
    readerWebView.setOnTouchListener(new OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            Log.d("ReaderFrameLayout", "setOnTouchListener");
            return true;
        }
    });
}

并将其从 XML 布局中删除

<RelativeLayout 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" >

    <com.mbs.helpers.ReaderFrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="83dp" />

</RelativeLayout>

如果您真的想从 XML 布局创建自定义视图,那么您需要在单独的 XML 文件中执行此操作并在自定义类中对其进行扩充。

例如,res/layout/reader.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <WebView
        android:id="@+id/fragment_reader_webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</FrameLayout>

在您的代码中:

    public ReaderFrameLayout(Context context, AttributeSet attrs,
            int defaultStyle) {
        super(context, attrs, defaultStyle);
        LayoutInflater.from(context).inflate(R.layout.reader, this);
        WebView readerWebView = (WebView) findViewById(R.id.fragment_reader_webview);
        readerWebView.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.d("ReaderFrameLayout", "setOnTouchListener");
                return true;
            }
        });
    }
于 2012-11-27T10:41:30.860 回答