it-swarm.dev

Chyba: <item> tag vyžaduje atribut „drawable“ nebo podřízený tag definující kreslení

Vytvořil jsem soubor voličů stavů item_bg_selector.xml v takto nakreslené složce:

<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>

Pak definuji prvek stylu 

<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>

Pak se pokusím vytvořit ImageButton takto:

    <ImageButton style="@style/Item"
        Android:id="@id/btn_home"
    Android:src="@drawable/home_button" />

Eclipse mi dává následující chybu v okně Event Details

Failed to parse file /path/to/projectdir/res/drawable/item_bg_selector.xml

Sledování výjimek je uvedeno níže:

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)

Otázkou je, kde je chyba? existují soubory ve složce. tag má atribut drawable. Mám to zkontroloval téměř 15 krát a stále jsem nebyl schopen najít problém. Věřím, že je to velmi jednoduchý problém (pokud existuje). Jakékoliv práce kolem toho, jak se s tím vyrovnat, jsou také oceňovány.

Přidání: Také řádek 16 v item_bg_selector.xml odpovídá třetímu řádku shora v souboru, který jsem odeslal. to je 

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <item Android:state_selected="true" 
line16 ----> Android:drawable="@drawable/item_background_selected" />
27
500865

Nakonec jsem se dozvěděla, že je to problém s ADT a ve skutečnosti běží na zařízení. To odpovídá vydání 21046 .

12
500865

Chyba má co do činění s formátem vašeho XML, nastavujete něco jako 

Android:background="@drawable/item_bg_selector"

Co ti ta chyba říká je, že by to mělo být takhle

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

Měla jsem stejnou chybu a přepínání pořadí atributů (jak bylo navrženo v této odpovědi na tuto jinou otázku ), aby měla kreslená první vyřešena problém.

Ve vašem případě by bylo přepínání:

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

na:

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

Zažil jsem stejnou výjimku pro jiný problém.

Snažil jsem se použít volič barev pro Viewname 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>

Problém byl vyřešen přesunutím voliče do složky pro kreslení a změnou Android:color na Android:drawable.

Také je nutné změnit definici pozadí v rozložení na Android:background="@drawable/tab_background_selector"

Zde je poslední volič:

<!-- /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>
6
Oleksandr

Restartování Eclipse a čištění projektu fungovalo pro mě.

2
Draghon

Také jsem narazil na stejný problém. 

Právě jsem restartoval Eclipse s -clean a provedené project -> Clean na projektu a chyby zmizely.

2
ProfVersaggi

Kreslení uvnitř souboru (png) bylo poškozeno. Znovu jsem uložil soubor a fungovalo to.

1
Alberto M

Dostal jsem to do práce zkopírováním obrázku přímo do systému souborů (Finder na Mac), spíše než přes Android Studio.

0
craned

Stejná chyba se vyskytne v souboru activity_main.xml, pokud je v LinearLayout v souboru Activity. Odstranění tohoto problému řeší. 

Čištění a další věci nepomáhají. 

0
Debolabanks

Měl jsem problém, protože při přejmenování selektoru pro před-Lollipop zařízení, jsem zapomněl přejmenovat zvlnění s téhož jména také ve složce drawable-v21.

0
Nino Handler