Файл XML ImageButton Selector не найден в Eclipse 3.6.1?

1

Имея некоторые проблемы с 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)

Теги:

2 ответа

0
Лучший ответ

Попробуйте выполнить строчку s в selector. Если это не помогает, избавитесь от строки PI, которая выглядит так:

<?xml version="1.0" encoding="utf-8"?>

Он жалуется на эту строку, хотя я не совсем уверен, почему.

  • 0
    Привет CommonsWare, хорошо заметили! Я следую инструкциям Busy Coders Guide и получаю информацию об отслеживании, когда обнаружил ImageButton & selector. Удаление строки PI (не так, как эта строка, если она называется так что-то новое) и изменение Selector на selector исправили проблему, спасибо за вашу помощь, очень признателен !!
  • 0
    Посмотрите мой ответ ниже для деталей о том, что действительно не так с этой строкой XML.
0

Я несколько раз бил головой об эту стену, и теперь у меня есть ответ (я ненавижу таинственное поведение, особенно когда это кажется случайным).

Я только что проверил четырехсторонний тест (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 обработал это более последовательно... или, по крайней мере, дал вам способ легко идентифицировать и устранить проблему, удалив заголовок двоичной спецификации...)

  • Если у вас есть сомнения, просмотрите файл с помощью внешнего шестнадцатеричного редактора, желательно того, который не поддерживает Unicode (WinHex работал у меня, YMMV). Некоторые текстовые/шестнадцатеричные редакторы будут автоматически обнаруживать Unicode и могут автоматически добавлять заголовок, когда файл на самом деле его не имеет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню