Еще один день с Xamarin и еще одна проблема!
Итак, пустой Xamarin.Android
проект. Создал собственный стиль/форму в папке mipmap-anydpi-v26
в разделе ресурсов, потому что он недоступен, если я создам его в другом месте или даже в другой новой подпапке. Даже в решении нет папки drawable
(что меня очень озадачивает).
В любом случае, вот как это выглядит:
myshape.xml
<?xml version = "1.0" encoding = "utf-8" ?>
<shape xmlns:android = "http://schemas.android.com/apk/res/android"
android:shape = "rectangle">
<solid android:color = "#ffffff" />
<size android:height = "10dp" android:width = "10dp"/>
<corners android:radius = "130dp" />
</shape>
Затем я установил его как background
из LinearLayout
следующим образом:
<LinearLayout android:layout_height = "match_parent"
android:layout_weight = "match_parent"
android:background = "@mipmap/myshape"/>
Это прекрасно видно в дизайнере. Даже внутри эмулятора он отлично работает как в режиме отладки, так и в режиме выпуска.
Проблема возникает, когда я пытаюсь отладить ее на физическом устройстве (Самсунг Галакси J2). Он работает под управлением Android 5.1 (уровень API 22) (Обратите внимание, что минимальным требованием для моего проекта является уровень API 21.). Итак, когда я пытаюсь отладить приложение через устройство, я получаю следующую ошибку:
Java.Lang.Exception: Binary XML file line #1: Error inflating class
Ошибка возникает в следующей строке метода MainActivity.cs
OnCreate()
:
SetContentView(Resource.Layout.activity_main);
Однако, если я устанавливаю фон как ic_launcher
, который выглядит как логотип, но сохраняется как файл .xml
в папке mipmap-anydpi-v26
, он работает отлично. ic_launcher.xml
выглядит так:
<?xml version = "1.0" encoding = "utf-8"?>
<adaptive-icon xmlns:android = "http://schemas.android.com/apk/res/android">
<background android:drawable = "@color/ic_launcher_background"/>
<foreground android:drawable = "@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
Итак, я немного смущен, как мне тогда установить фигуру в качестве фона? Я просмотрел другие сообщения SO, но почти во всех из них есть папка drawable
, которая отсутствует в моем случае. Даже в новом проекте папка отсутствует. Вы можете просто воспроизвести его, создав пустой Xamarin.Android
проект.
Итак, есть идеи, почему он может зависать на физическом устройстве?
@sunilsunny Уже пробовал, но таким образом он вообще не может получить доступ к форме.
...have the drawable folder which is missing in my case.
Просто создайте папку drawable
в своей папке Resources
.
Примечание. Делайте это через обозреватель решений/проектов IDE, а не через файловую систему.
Существует несколько папок Resources, и шаблоны Xamarin не создают их все по умолчанию.
Примечание. На самом деле они становятся res/xxxx
в файловой структуре Android APK.
Re: https://developer.android.com/training/multiscreen/screendensities
Уже пробовал, но таким образом он вообще не может получить доступ к форме.
Итак, кажется, что внутри эмулятора все работает. Однако мне интересно, почему в представлении дизайна он ничего не показывает.
Да, теперь он отлично работает и на устройстве! Но один вопрос. Я больше не могу видеть стиль/форму в дизайнере. Если это продолжится, как я вообще смогу разработать пользовательский интерфейс?
@zackraiyan Представление дизайна Xamarin.Android не всегда самое лучшее ? и бывают случаи, когда вам нужно закрыть файл макета и снова открыть его или даже перезапустить Visual Studio, чтобы он снова заработал ... (Примечание: лично я использую Android Studio для его основных инструментов компоновки, и как только я буду доволен, перетащите подпапки «res» в папку ресурсов VS IDE (существует по крайней мере одно стороннее расширение VSIX, которое делает это автоматически, поэтому вы можете переключаться между Android Studio и Visual Studio в помощь в этом процессе, а я просто перетаскиваю....)
Можешь дать ссылку на расширение?
@zackraiyan Я не использую его и не могу вспомнить название, поищите его/их в магазине надстроек Visual Studio....
Без проблем. Еще раз спасибо, приятель.
Кстати, не могли бы вы дать мне небольшое руководство по пользовательским элементам управления в Xamarin.Android? Пожалуйста, взгляните на мой вопрос здесь
У вас может быть папка
Resources
, если да, создайте папкуdrawable
внутриResources
и попробуйте переместить свою фигуру в эту папку. После этого попробуйтеBuild->Clean Solution
, а затемBuild->Rebuild Solution
.