私は過去にカスタムレイアウトを使用しましたが、これまでのところ、子ビューを記述してlayoutInflater.inflate
関数を使用するためのxmlレイアウトファイルのみを使用しています。
今回は、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...
明らかな何かが欠けていると思いますが、何が間違っているのか理解できません。私が間違っていることはありますか?
編集 私はついに問題を見つけました。それは私がプロジェクトに含めたばかりのadmoblibから来ていたので、私はそれを使用していませんでした!ADT17以降、外部JARもlibsディレクトリに存在する必要があります...誰かが同じ問題に遭遇した場合にこれが役立つことを願っています!