以编程方式将视图添加到自定义布局(不使用inflate函数)时出错

时间:2012-09-07 09:46:25

标签: android android-layout layout

我过去使用过自定义布局,但到目前为止只使用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 lib,我甚至没有使用它!自ADT17以来,外部JAR也必须在libs目录中......如果有人遇到同样的问题,希望这会有所帮助!

1 个答案:

答案 0 :(得分:0)

initMyWebView()您为两个变量分配了新值(mywebViewmywebViewLayoutParams),但这些变量在哪里发起?也许你只需要初始化那些变量。

我看到你初始化webViewLayoutParams但不是mywebViewLayoutParams