1

我过去使用过自定义布局,但到目前为止只使用 xml 布局文件来描述我的子视图并使用该layoutInflater.inflate功能。

这次我不想使用 xml 布局文件,而是以编程方式将我想要的所有视图添加到我的自定义布局中。我要做的是:

public class myLayout extends FrameLayout  {
    private Context c;
    private LayoutParams webViewLayoutParams;

    public myLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    c = context;
    initMyWebView();
    addToLayout(mywebView,mywebViewLayoutParams);
}

    private void initMyWebView() {
    Log.d("init", "init webview");
    mywebView=new WebView(c);
    mywebViewLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.MATCH_PARENT);


}
   private void addToLayout(View view, LayoutParams params) {
    Log.d("init", "adding child view");
    this.addView(view, params);

}
}

我的自定义布局仅在我的主要活动布局文件中“调用”

<com.mypackage.myLayout
    android:id="@+id/myLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

当我在终端上启动应用程序时,它会立即崩溃

09-07 11:17:25.035: E/ActivityThread(17250): Failed to inflate
09-07 11:17:25.035: E/ActivityThread(17250): android.view.InflateException: Binary XML file line #18: Error inflating class com.mypackage.myLayout
09-07 11:17:25.035: E/ActivityThread(17250):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
09-07 11:17:25.035: E/ActivityThread(17250):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
etc...

我想我错过了一些明显的东西,但我不知道我做错了什么。有什么我做错了吗?

编辑 我终于找到了问题。它来自我刚刚包含在项目中的 admob 库,我什至没有使用它!外部 JAR 也必须在 libs 目录中,因为 ADT17 ......希望如果有人遇到同样的问题,这会有所帮助!

4

1 回答 1

0

in your initMyWebView() you assign two variables new values(mywebView and mywebViewLayoutParams), but where are these initiated? Maybe you only need to init those variables.

I see that you init webViewLayoutParams but not mywebViewLayoutParams

于 2012-09-07T10:26:31.577 回答