Android のライブラリでカスタムフォームを使っている場合のtips
概要
対象
要因
- layoutのxmlにて、xmlns定義を間違えている
- xmlnsはリソースの存在する場所を指定する
- ライブラリの場合、リソースは、親プロジェクト(apkを最終的に作成するプロジェクト)へ統合されるため、指定先は親プロジェクトとなる
サンプル
問題のあるコード
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:validate="http://schemas.android.com/apk/res/com.andreabaccega.formedittext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <ScrollView android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <com.andreabaccega.widget.FormEditText style="@android:style/Widget.EditText" android:id="@+id/editName" android:inputType="text" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="@string/menu_setting_edit_name" android:singleLine="true" validate:testType="nocheck" > <requestFocus /> </com.andreabaccega.widget.FormEditText> </LinearLayout> </ScrollView> </LinearLayout>
問題のログ
Error Sun Oct 28 01:09:22 JST 2012 com.andreabaccega.widget.FormEditText failed to instantiate. android.content.res.Resources$NotFoundException: Could not resolve resource value: 0x7F050004. at com.android.layoutlib.bridge.android.BridgeResources.throwException(BridgeResources.java:648) at com.android.layoutlib.bridge.android.BridgeResources.getString(BridgeResources.java:461) at android.content.Context.getString(Context.java:182) at com.andreabaccega.widget.FormEditText.(FormEditText.java:143) at com.andreabaccega.widget.FormEditText.(FormEditText.java:72) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:402) at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:166) at com.android.layoutlib.bridge.android.BridgeInflater.loadCustomView(BridgeInflater.java:205) at com.android.layoutlib.bridge.android.BridgeInflater.createViewFromTag(BridgeInflater.java:133) (以下略)
修正箇所
xmlns:validate="http://schemas.android.com/apk/res/com.andreabaccega.formedittext" ↓ xmlns:validate="http://schemas.android.com/apk/res-auto"
※ com.andreabaccega.formedittext はカスタムフォームのパッケージ名(外部Androidライブラリ)