2011-11-13 22 views
22

我在繪製文件夾這樣創造了一個狀態列表選擇文件item_bg_selector.xml錯誤:<item>標籤需要「繪製」屬性或子標籤定義繪製

<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窗口:

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) 

現在,問題是哪裏出了錯誤:下面

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

的異常跟蹤給定? drawables存在於文件夾中。標記具有可繪製的屬性。我已經交叉檢查了近15次,但仍然無法找到問題所在。我相信這是一個非常簡單的問題(如果有的話)。任何解決這個問題的工作也是值得讚賞的。

此外: 另外,item_bg_selector.xml中的第16行對應於我發佈的文件頂部的第三行。那就是

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

回答

12

最後,我知道它只是ADT的一個問題,它實際上在設備上運行良好。這對應於問題21046

+0

任何變通辦法?沒有一個建議的人爲我工作。 – Matthias

+0

它似乎已經在r17中修復; tools.android.com上有一個預覽版。 –

2

我也遇到了同樣的問題。

我剛剛重新啓動了日食-clean,並對該項目做了project -> Clean,錯誤消失了。

+0

可能取決於我們使用的操作系統。它在Mac上工作。 – 500865

+0

是啊,它不是在mac中工作 –

36

錯誤與您的XML的格式來做,要設置類似

android:background="@drawable/item_bg_selector" 

什麼錯誤是告訴你的是,它應該是這樣的

android:drawable="@drawable/item_bg_selector" 
+1

我嘗試了很多東西,甚至在沒有任何工作時切換到intellij。這個解決方案節省了我的一天非常感謝。 –

+0

我試着改變「android:background」爲「android:drawable」。它不起作用。 – Gene

+0

其工作感謝 –

2

重新啓動Eclipse並清理項目爲我工作。

18

我有同樣的錯誤,並切換屬性的順序(因爲它是在this answer這個other question建議)有可繪製的第一個解決了這個問題。

在你的情況將被切換:

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

到:

<item android:drawable="@drawable/item_background_selected" 
    android:state_selected="true" /> 
+0

您的解決方案工作!但我想知道爲什麼那樣。我們正在爲國家定義可繪製的。不是相反:) – Ashwin

+0

即使[官方文檔](https://developer.android.com/guide/topics/resources/color-list-resource.html)對此是錯誤的 – mr5

0

我得到了它的圖像複製權限到文件系統(查找程序在Mac上),而不是通過Android的工作工作室。

0

我遇到了問題,因爲重命名前棒棒糖設備的選擇器時,我忘記用drawable-v21文件夾中的同名重命名紋波。

0

如果Activity中存在額外的LinearLayout,則activity_main.xml文件上會發生同樣的錯誤。刪除此解決了問題。

清潔和其他的東西沒有幫助。

2

我遇到了另一個問題的例外。

我試圖用爲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>