我过去使用过自定义布局,但到目前为止只使用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目录中......如果有人遇到同样的问题,希望这会有所帮助!
答案 0 :(得分:0)
在initMyWebView()
您为两个变量分配了新值(mywebView
和mywebViewLayoutParams
),但这些变量在哪里发起?也许你只需要初始化那些变量。
我看到你初始化webViewLayoutParams
但不是mywebViewLayoutParams