web-dev-qa-db-ja.com

エラー:<item>タグには、drawableを定義する 'drawable'属性または子タグが必要です

次のように、ドロアブルフォルダーに状態リストセレクタファイル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" />
31
500865

最後に、ADTだけの問題であり、実際にデバイス上で正常に動作することを知りました。これは、問題 21046 に対応します。

12
500865

エラーはあなたのXMLのフォーマットに関係しています、あなたは次のようなものを設定しています

Android:background="@drawable/item_bg_selector"

エラーがあなたに言っていることは、それがこのようであるべきであるということです

Android:drawable="@drawable/item_bg_selector"
41
Napsters

私は同じエラーがあり、属性の順序を切り替えました(これは this answer でこれに示唆されたように- 他の質問 )最初のドロアブルをにすることで問題を解決しました。

あなたの場合は切り替えます:

  <item Android:state_selected="true" 
   Android:drawable="@drawable/item_background_selected" />

に:

  <item Android:drawable="@drawable/item_background_selected"
   Android:state_selected="true" />
19
pconcepcion

別の問題でも同じ例外が発生しました。

ViewAndroid: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:colorAndroid: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>
7
Oleksandr

Eclipseを再起動し、プロジェクトをクリーンアップすることができました。

2
Draghon

私も同じ問題に遭遇しました。

-cleanでEclipseを再起動したところ、問題のプロジェクトでproject -> Cleanを実行したため、エラーはなくなりました。

2
ProfVersaggi

ファイル内のドロウアブル(png)が破損していました。ファイルを再度保存したところ、うまくいきました。

1
Alberto M

Android Studio。)ではなく、ファイルシステム(MacのFinder)に画像を直接コピーすることで動作するようになりました。

0
craned

LinearLayoutに余分なActivityがある場合、activity_main.xmlファイルで同じエラーが発生します。これを削除すると問題が解決します。

掃除などは役に立ちません。

0
Debolabanks

以前のLollipopデバイスのセレクターの名前を変更するときに、drawable-v21フォルダーでも同じ名前のリップルの名前を変更するのを忘れていたため、問題がありました。

0
luckyhandler