Имея некоторые проблемы с ImageButton с Selector.xml в качестве ресурса с возможностью вывода, продолжайте получать следующую ошибку при переключении на графический макет в Eclipse:
Невозможно разрешить рисование "E:\Programing\Eclipse Workspace\com.commonsware.android.Sandbox\res\drawable-hdpi\keycselector.xml" в атрибуте "src" Сведения об исключении регистрируются в окне > Показать представление > Журнал ошибок
Это ImageButton, показывающий, что src установлен в файл keycselector.xml:
<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 (position: unknown ï" ¿@1: 7 в java.io.FileReader@172b8dd) ":
org.xmlpull.v1.XmlPullParserException: PI не должен начинаться с xml (position: unknown ï" ¿@1: 7 в java.io.FileReader@172b8dd) at org.kxml2.io.KXmlParser.exception(Неизвестный источник) at org.kxml2.io.KXmlParser.error(Неизвестный источник) at org.kxml2.io.KXmlParser.parseLegacy(Неизвестный источник) at org.kxml2.io.KXmlParser.nextImpl(Неизвестный источник) at org.kxml2.io.KXmlParser.next(Неизвестный источник) на com.android.layoutlib.bridge.BridgeXmlBlockParser.next(BridgeXmlBlockParser.java:238) в android.graphics.drawable.Drawable.createFromXml(Drawable.java:721) на com.android.layoutlib.bridge.ResourceHelper.getDrawable(ResourceHelper.java:150) в com.android.layoutlib.bridge.BridgeTypedArray.getDrawable(BridgeTypedArray.java:670) в android.widget.ImageView. (ImageView.java:118) на android.widget.ImageButton. (ImageButton.java:82) на android.widget.ImageButton. (ImageButton.java:78) at sun.reflect.GeneratedConstructorAccessor19.newInstance(Неизвестный источник) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Неизвестный источник) в java.lang.reflect.Constructor.newInstance(Неизвестный источник) на android.view.LayoutInflater.createView(LayoutInflater.java:500) на android.view.BridgeInflater.onCreateView(BridgeInflater.java:77) на android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) на android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:122) на android.view.LayoutInflater.rInflate(LayoutInflater.java:618) на android.view.LayoutInflater.rInflate(LayoutInflater.java:621) на android.view.LayoutInflater.rInflate(LayoutInflater.java:621) на android.view.LayoutInflater.inflate(LayoutInflater.java:407) на android.view.LayoutInflater.inflate(LayoutInflater.java:296) на com.android.layoutlib.bridge.Bridge.computeLayout(Bridge.java:397) на com.android.ide.common.rendering.LayoutLibrary.createLegacySession(LayoutLibrary.java:382) на com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:276) at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(Неизвестный источник) at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(Неизвестный источник) at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(Неизвестный источник) at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart $ReloadListener.reloadLayoutSwt(Неизвестный источник) at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart $ReloadListener.access $0 (Неизвестный источник) at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart $ReloadListener $1.run(Неизвестный источник) на org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) на org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) на org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041) на org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) на org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) на org.eclipse.ui.internal.Workbench.access $4 (Workbench.java:2438) at org.eclipse.ui.internal.Workbench $7.run(Workbench.java:671) на org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) на org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) на org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) на org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) на org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) на org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) на org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke(Неизвестный источник) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Неизвестный источник) в java.lang.reflect.Method.invoke(Неизвестный источник) на org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619) на org.eclipse.equinox.launcher.Main.basicRun(Main.java:574) на org.eclipse.equinox.launcher.Main.run(Main.java:1407)
Попробуйте выполнить строчку s
в selector
. Если это не помогает, избавитесь от строки PI, которая выглядит так:
<?xml version="1.0" encoding="utf-8"?>
Он жалуется на эту строку, хотя я не совсем уверен, почему.
Я несколько раз бил головой об эту стену, и теперь у меня есть ответ (я ненавижу таинственное поведение, особенно когда это кажется случайным).
Я только что проверил четырехсторонний тест (Unix и DOS, с и без двоичного заголовка/подписи BF BF EF BB). Я обнаружил, что Eclipse не помещает двоичный заголовок BOM в файлы XML, которые он создает, период. Если вы добавляете файл с заголовком объявления "<?xml ... ?>"
, он работает правильно ТОЛЬКО, если эта двоичная подпись является ABSENT, (Независимо от того, являются ли EOL Unix или DOS, не имеет значения). Если у вас есть обе формы заголовка, вы получаете эту проблему. У вас может быть один, другой или ни один, но оба они оба.
Итак, если вы создаете новый XML файл в Eclipse, вы можете ожидать (в 3.6 - 3.7.1 в любом случае), что он не имеет двоичного заголовка спецификации, и вы должны правильно разместить заголовок объявления "<?xml ... ?>"
там, чтобы идентифицировать его как Unicode. Если вы импортируете проект, в котором есть файлы с подписями заголовков двоичных спецификаций, или используйте внешний редактор, который любит их добавлять, то, где начинается все это весело.
В идеале убедитесь, что файлы XML с декларацией не имеют двоичного заголовка спецификации перед импортом... в противном случае удалите заголовок объявления "<?xml ... ?>"
всякий раз, когда Eclipse жалуется... не удаляя двоичный заголовок, что все вы может быть легко. (Было бы неплохо, если Eclipse обработал это более последовательно... или, по крайней мере, дал вам способ легко идентифицировать и устранить проблему, удалив заголовок двоичной спецификации...)