Android 在Eclipse 3.6.1中找不到ImageButton选择器XML文件?
使用Selector.xml作为可绘制源的ImageButton时遇到一些问题,当我在Eclipse中切换到图形布局时,会出现以下错误: 无法解析属性src中的可绘制E:\Programming\Eclipse Workspace\com.commonware.android.Sandbox\res\drawable hdpi\keycselector.xml 异常详细信息记录在窗口>显示视图>错误日志中 这是显示设置为keycselector.xml文件的src的ImageButton:Android 在Eclipse 3.6.1中找不到ImageButton选择器XML文件?,android,eclipse,Android,Eclipse,使用Selector.xml作为可绘制源的ImageButton时遇到一些问题,当我在Eclipse中切换到图形布局时,会出现以下错误: 无法解析属性src中的可绘制E:\Programming\Eclipse Workspace\com.commonware.android.Sandbox\res\drawable hdpi\keycselector.xml 异常详细信息记录在窗口>显示视图>错误日志中 这是显示设置为keycselector.xml文件的src的ImageButton: &l
<ImageButton
android:layout_width="127px"
android:layout_height="match_parent"
android:id="@+id/BtnC"
android:padding="0px"
android:src="@drawable/keycselector">
</ImageButton>
这是keycselector.xml文件,它位于\res\drawable hdpi中\
<?xml version="1.0" encoding="utf-8"?>
<Selector xmlns:android="http://schemas.android.com/apk/res/android" android:constantSize="true">
<item android:state_pressed="true" android:drawable="@drawable/keycimagepressed" />
<item android:state_focused="true" android:drawable="@drawable/keycimagepressed" />
<item android:drawable="@drawable/keycimage" />
</Selector>
这里是跟踪,不知道这是什么意思,PI不能以xml位置开始:unknownï»»java.io中的@1:7。FileReader@172b8dd:
org.xmlpull.v1.XmlPullParserException:PI在java.io中不能以xml位置:unknownï»1:7开头。FileReader@172b8dd
位于org.kxml2.io.KXmlParser.exceptionUnknown Source
位于org.kxml2.io.KXmlParser.error未知源
位于org.kxml2.io.KXmlParser.parseLegacyUnknown Source
位于org.kxml2.io.KXmlParser.nextim的已知源
位于org.kxml2.io.KXmlParser.nextUnknown Source
在com.android.layoutlib.bridge.BridgeXmlBlockParser.nextBridgeXmlBlockParser.java:238
位于android.graphics.drawable.drawable.createFromXmlDrawable.java:721
位于com.android.layoutlib.bridge.ResourceHelper.getDrawableResourceHelper.java:150
在com.android.layoutlib.bridge.BridgeTypedArray.getDrawableBridgeTypedArray.java:670
在android.widget.ImageView.ImageView.java:118
在android.widget.ImageButton.ImageButton.java:82
在android.widget.ImageButton.ImageButton.java:78
位于sun.reflect.generatedconstructor或accessor19.newInstanceUnknown Source
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstanceUnknown Source
位于java.lang.reflect.Constructor.newInstanceUnknown Source
在android.view.LayoutInflater.createViewLayoutInflater.java:500
在android.view.BridgeInflater.onCreateViewBridgeInflater.java:77
在android.view.LayoutInflater.createViewFromTagLayoutInflater.java:563
在android.view.BridgeInflater.createViewFromTagBridgeInflater.java:122
在android.view.LayoutInflater.rInflateLayoutInflater.java:618
在android.view.LayoutInflater.rInflateLayoutInflater.java:621
在android.view.LayoutInflater.rInflateLayoutInflater.java:621
在android.view.LayoutInflater.inflateLayoutInflater.java:407
在android.view.LayoutInflater.inflateLayoutInflater.java:296
位于com.android.layoutlib.bridge.bridge.computeLayoutBridge.java:397
位于com.android.ide.common.rendering.layoutbrary.createLegacySessionLayoutLibrary.java:382
位于com.android.ide.common.rendering.layoutbrary.createSessionLayoutLibrary.java:276
位于com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderwithbridge未知源
位于com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderwithbridge未知源
在com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputelayou未知源
位于com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart$ReloadListener.reloadLayoutSwtun已知源
在com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart$ReloadListener.access$0未知源
位于com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart$ReloadListener$1.run未知源代码
位于org.eclipse.swt.widgets.RunnableLock.RunnableLock.java:35
位于org.eclipse.swt.widgets.Synchronizer.runasynchMessagesSynchronizer.java:134
在org.eclipse.swt.widgets.Display.runAsyncMessagesDisplay.java:4041
位于org.eclipse.swt.widgets.Display.readAndDispatchDisplay.java:3660
位于org.eclipse.ui.internal.Workbench.runEventLoopWorkbench.java:2640
位于org.eclipse.ui.internal.Workbench.runUIWorkbench.java:2604
在org.eclipse.ui.internal.Workbench.access$4Workbench.java:2438
位于org.eclipse.ui.internal.Workbench$7.runWorkbench.java:671
位于org.eclipse.core.databinding.observable.Realm.runWithDefaultRealm.java:332
位于org.eclipse.ui.internal.Workbench.createAndRunWorkbenchWorkbench.java:664
位于org.eclipse.ui.PlatformUI.createAndRunWorkbenchPlatformUI.java:149
位于org.eclipse.ui.internal.ide.application.IDEApplication.startIDEApplication.java:115
在org.eclipse.equinox.internal.app.eclipseeapphandle.runEclipseAppHandle.java:196
位于org.eclipse.core.runtime.internal.adapter.eclipseeappluncher.runapplicationclipseappluncher.java:110
位于org.eclipse.core.runtime.internal.adapter.eclipseeappluncher.starteclipseappluncher.java:79
位于org.eclipse.core.runtime.adapter.EclipseStarter.runEclipseStarter.java:369
位于org.eclipse.core.runtime.adapter.EclipseStarter.runEclipseStarter.java:179
在sun.reflect.NativeMethodAccessorImpl.invoke0Native方法中
位于sun.reflect.NativeMethodAccessorImpl.invokeUnknown源
在sun.reflect.DelegatingMethodAccessorImpl.invokeUnknown源
位于java.lang.reflect.Method.invokeUnknown源
位于org.eclipse.equinox.launcher.Main.invokeFrameworkMain.java:619
位于org.eclipse.equinox.launcher.Main.basicRunMain.java:574
在org.eclipse.equinox.launch
java:1407在选择器中尝试使用小写的s。如果这没有帮助,请去掉PI线,它看起来像:
<?xml version="1.0" encoding="utf-8"?>
它在抱怨这句台词,尽管我不太清楚为什么。我已经用头撞了几次这堵墙,现在我有了答案,我讨厌神秘的行为,尤其是当它看起来是随机的时候 我刚刚在Unix和DOS上运行了一个4路测试,有无二进制EF BB BF BOM头/签名。我发现Eclipse并没有将二进制BOM头放入它创建的XML文件中。如果您添加了一个具有声明头的文件,则只有在没有该二进制签名的情况下,该文件才能正常工作。EOL是Unix还是DOS并不重要。如果两种形式的标题都有,则会出现此问题。你可以有一个,另一个,或者两者都没有,但决不能两者都有 因此,如果您在Eclipse中创建一个新的XML文件,您可以在3.6-3.7.1中预期它没有二进制BOM头,您应该在其中正确地放置一个声明头,以将其标识为Unicode。如果您导入的项目包含具有二进制BOM表头签名的文件,或者使用喜欢添加这些文件的外部编辑器,那么所有这些乐趣就从这里开始 理想情况下,在导入带有声明的XML文件之前,请确保它们没有二进制BOM头。。。否则,在Eclipse抱怨时删除该声明头。。。除了删除二进制头之外,这就是您可以轻松完成的所有操作。如果Eclipse能够更一致地处理这个问题,那就太好了。。。或者至少为您提供了一种方法,通过删除二进制BOM头来识别和修复问题 如果有疑问,请使用外部十六进制编辑器检查该文件,最好是一个不支持Unicode的WinHex编辑器,YMMV。一些文本/十六进制编辑器将自动检测Unicode,并可能在文件实际上没有头时自动添加头。
你有没有按下keycimage,keycimage图像文件也在drawable文件夹中?嗨,Tim,谢谢你的评论,是的,文件在drawable文件夹中,我只是再次检查了一下以防万一。干杯嗨,公共软件,很好的发现!我正在按照《忙碌的程序员指南》进行操作,当我发现ImageButton&selector时,我被跟踪了。移除两条PI线并没有,这就是那条线,如果它被称为新的东西,并将选择器更改为选择器修复了问题,感谢您的帮助,非常感谢!!请参阅下面我的答案,了解XML行到底出了什么问题的详细信息。