次のように、ドロアブルフォルダーに状態リストセレクタファイルitem_bg_selector.xml
を作成しました。
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true"
Android:drawable="@drawable/item_background_selected" />
<item Android:state_focused="true"
Android:drawable="@drawable/item_background_selected" />
<item Android:state_pressed="true"
Android:drawable="@drawable/item_background_selected" />
<item Android:drawable="@Android:color/transparent"/>
</selector>
次に、スタイル要素を定義します
<style name="Item">
<item name="Android:layout_width">wrap_content</item>
<item name="Android:layout_height">wrap_content</item>
<item name="Android:background">@drawable/item_bg_selector</item>
</style>
次に、次のようなImageButton
を作成しようとします。
<ImageButton style="@style/Item"
Android:id="@id/btn_home"
Android:src="@drawable/home_button" />
EclipseはEvent Details
ウィンドウに次のエラーを表示し続けます:
Failed to parse file /path/to/projectdir/res/drawable/item_bg_selector.xml
例外トレースは次のとおりです。
org.xmlpull.v1.XmlPullParserException: Binary XML file line #16: <item> tag requires a 'drawable' attribute or child tag defining a drawable
at Android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.Java:167)
at Android.graphics.drawable.Drawable.createFromXmlInner(Drawable.Java:787)
at Android.graphics.drawable.Drawable.createFromXml(Drawable.Java:728)
at com.Android.layoutlib.bridge.impl.ResourceHelper.getDrawable(ResourceHelper.Java:208)
at com.Android.layoutlib.bridge.Android.BridgeTypedArray.getDrawable(BridgeTypedArray.Java:731)
at Android.view.View.<init>(View.Java:1885)
at Android.widget.ImageView.<init>(ImageView.Java:112)
at Android.widget.ImageButton.<init>(ImageButton.Java:85)
at Android.widget.ImageButton.<init>(ImageButton.Java:81)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:39)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:27)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:513)
at Android.view.LayoutInflater.createView(LayoutInflater.Java:500)
at com.Android.layoutlib.bridge.Android.BridgeInflater.onCreateView(BridgeInflater.Java:84)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:563)
at com.Android.layoutlib.bridge.Android.BridgeInflater.createViewFromTag(BridgeInflater.Java:129)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:618)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:621)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:407)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:296)
at com.Android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.Java:279)
at com.Android.layoutlib.bridge.Bridge.createSession(Bridge.Java:318)
at com.Android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.Java:325)
at com.Android.ide.Eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.Java:372)
at com.Android.ide.Eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.Java:1317)
at com.Android.ide.Eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.Java:1071)
at com.Android.ide.Eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.activated(GraphicalEditorPart.Java:897)
at com.Android.ide.Eclipse.adt.internal.editors.layout.LayoutEditor.pageChange(LayoutEditor.Java:384)
at org.Eclipse.ui.part.MultiPageEditorPart$2.widgetSelected(MultiPageEditorPart.Java:290)
at org.Eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.Java:234)
at org.Eclipse.swt.widgets.EventTable.sendEvent(EventTable.Java:84)
at org.Eclipse.swt.widgets.Display.sendEvent(Display.Java:3783)
at org.Eclipse.swt.widgets.Widget.sendEvent(Widget.Java:1375)
at org.Eclipse.swt.widgets.Widget.sendEvent(Widget.Java:1398)
at org.Eclipse.swt.widgets.Widget.sendEvent(Widget.Java:1383)
at org.Eclipse.swt.widgets.Widget.notifyListeners(Widget.Java:1195)
at org.Eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.Java:2743)
at org.Eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.Java:1429)
at org.Eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.Java:257)
at org.Eclipse.swt.widgets.EventTable.sendEvent(EventTable.Java:84)
at org.Eclipse.swt.widgets.Display.sendEvent(Display.Java:3783)
at org.Eclipse.swt.widgets.Widget.sendEvent(Widget.Java:1375)
at org.Eclipse.swt.widgets.Widget.sendEvent(Widget.Java:1398)
at org.Eclipse.swt.widgets.Widget.sendEvent(Widget.Java:1383)
at org.Eclipse.swt.widgets.Widget.notifyListeners(Widget.Java:1195)
at org.Eclipse.swt.widgets.Display.runDeferredEvents(Display.Java:3629)
at org.Eclipse.swt.widgets.Display.readAndDispatch(Display.Java:3284)
at org.Eclipse.ui.internal.Workbench.runEventLoop(Workbench.Java:2640)
at org.Eclipse.ui.internal.Workbench.runUI(Workbench.Java:2604)
at org.Eclipse.ui.internal.Workbench.access$4(Workbench.Java:2438)
at org.Eclipse.ui.internal.Workbench$7.run(Workbench.Java:671)
at org.Eclipse.core.databinding.observable.Realm.runWithDefault(Realm.Java:332)
at org.Eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.Java:664)
at org.Eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.Java:149)
at org.Eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.Java:115)
at org.Eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.Java:196)
at org.Eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.Java:110)
at org.Eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.Java:79)
at org.Eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.Java:369)
at org.Eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.Java:179)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.Eclipse.equinox.launcher.Main.invokeFramework(Main.Java:620)
at org.Eclipse.equinox.launcher.Main.basicRun(Main.Java:575)
at org.Eclipse.equinox.launcher.Main.run(Main.Java:1408)
さて、問題はどこにエラーがあるのですか?ドロアブルはフォルダーに存在します。タグには描画可能な属性があります。私はこれを15回近くクロスチェックしましたが、それでも問題を見つけることができませんでした。私はそれが非常に単純な問題であると信じています(もしあれば)。これを乗り越えるための回避策も歓迎します。
追加:また、item_bg_selector.xml
の16行目は、投稿したファイルの先頭から3行目に対応しています。あれは
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true"
line16 ----> Android:drawable="@drawable/item_background_selected" />
最後に、ADTだけの問題であり、実際にデバイス上で正常に動作することを知りました。これは、問題 21046 に対応します。
エラーはあなたのXMLのフォーマットに関係しています、あなたは次のようなものを設定しています
Android:background="@drawable/item_bg_selector"
エラーがあなたに言っていることは、それがこのようであるべきであるということです
Android:drawable="@drawable/item_bg_selector"
私は同じエラーがあり、属性の順序を切り替えました(これは this answer でこれに示唆されたように- 他の質問 )最初のドロアブルをにすることで問題を解決しました。
あなたの場合は切り替えます:
<item Android:state_selected="true"
Android:drawable="@drawable/item_background_selected" />
に:
<item Android:drawable="@drawable/item_background_selected"
Android:state_selected="true" />
別の問題でも同じ例外が発生しました。
View
のAndroid:background
にカラーセレクターを使用しようとしていました。
<RadioButton
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@color/tab_background_selector" />
<!-- /res/color/tab_background_selector.xml -->
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:color="@color/white" Android:state_checked="true" />
<item Android:color="@color/light_blue" />
</selector>
セレクターを描画可能フォルダーに移動し、Android:color
をAndroid:drawable
に変更すると、問題が解決しました。
また、レイアウトの背景定義をAndroid:background="@drawable/tab_background_selector"
に変更する必要があります
最終的なセレクターは次のとおりです。
<!-- /res/drawable/tab_background_selector.xml -->
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@color/white" Android:state_checked="true" />
<item Android:drawable="@color/light_blue" />
</selector>
Eclipseを再起動し、プロジェクトをクリーンアップすることができました。
私も同じ問題に遭遇しました。
-clean
でEclipseを再起動したところ、問題のプロジェクトでproject -> Clean
を実行したため、エラーはなくなりました。
ファイル内のドロウアブル(png)が破損していました。ファイルを再度保存したところ、うまくいきました。
Android Studio。)ではなく、ファイルシステム(MacのFinder)に画像を直接コピーすることで動作するようになりました。
LinearLayout
に余分なActivity
がある場合、activity_main.xml
ファイルで同じエラーが発生します。これを削除すると問題が解決します。
掃除などは役に立ちません。
以前のLollipopデバイスのセレクターの名前を変更するときに、drawable-v21フォルダーでも同じ名前のリップルの名前を変更するのを忘れていたため、問題がありました。