Файл XML ImageButton Selector не найден в Eclipse 3.6.1? - PullRequest
1 голос
/ 19 февраля 2011

Возникают некоторые проблемы с 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 (позиция: неизвестна» ¿@ 1: 7 в java.io.FileReader@172b8dd) ":

org.xmlpull.v1.XmlPullParserException: PI не должен начинаться с xml (позиция: неизвестна ï »¿@ 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) на 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.recomputeLayout (Неизвестный источник) на com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart $ ReloadListener.reloadLayoutSwt (неизвестный источник) на 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.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) в 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) на org.eclipse.ui.internal.Workbench $ 7.run (Workbench.java:671) в орг.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:332) в org.eclipse.ui.internal.Workbench.createAndRunWorkbench (Workbench.java:664) в org.eclipse.ui.rebateU.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.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:369) в org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:179) в sun.reflect.NativeMetmplinorsun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) в 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 голосов
/ 29 февраля 2012

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

Я простопровел четырехсторонний тест (Unix и DOS, с двоичным заголовком / подписью спецификации EF BB BF и без него). Я обнаружил, что Eclipse не помещает двоичный заголовок спецификации в создаваемые им XML-файлы, точка. Если вы добавляете файл с заголовком объявления "<?xml ... ?>", он работает правильно ТОЛЬКО, если эта двоичная подпись ОТСУТСТВУЕТ.(Независимо от того, являются ли EOL Unix или DOS, не имеет значения).Если у вас есть обе формы заголовка, вы получите эту проблему.Вы можете иметь одно, другое или ни одного, но не оба одновременно.

Итак, если вы создаете новый файл XML в Eclipse, вы можете ожидать (в любом случае в 3.6 - 3.7.1), что у него нет двоичной спецификациизаголовок, и вы должны правильно поместить заголовок объявления "<?xml ... ?>", чтобы идентифицировать его как Unicode.Если вы ИМПОРТИРУЕТЕ проект, в котором есть файлы с двоичными сигнатурами заголовка спецификации, или используете внешний редактор, который любит их добавлять, вот где все это начинается.

В идеале, убедитесь, что файлы XML с декларацией неиметь двоичный заголовок спецификации перед их импортом ... в противном случае удаляйте этот заголовок объявления "<?xml ... ?>" всякий раз, когда Eclipse жалуется ... если не считать удаления двоичного заголовка, это все, что вы можете легко сделать. (Было бы неплохо, если бы Eclipse обрабатывалсяэто более согласованно ... или, по крайней мере, дало вам возможность легко определить и устранить проблему, удалив двоичный заголовок спецификации ...)

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...