Xamarin.Android аварийно завершает работу при попытке загрузить стиль из ресурса

Еще один день с 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.csOnCreate():

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 проект.

Итак, есть идеи, почему он может зависать на физическом устройстве?

У вас может быть папка Resources, если да, создайте папку drawable внутри Resources и попробуйте переместить свою фигуру в эту папку. После этого попробуйте Build->Clean Solution, а затем Build->Rebuild Solution.

sunil sunny 09.04.2019 01:59

@sunilsunny Уже пробовал, но таким образом он вообще не может получить доступ к форме.

Christopher H. 09.04.2019 02:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
170
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

...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

Уже пробовал, но таким образом он вообще не может получить доступ к форме.

Christopher H. 09.04.2019 02:12

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

Christopher H. 09.04.2019 02:15

Да, теперь он отлично работает и на устройстве! Но один вопрос. Я больше не могу видеть стиль/форму в дизайнере. Если это продолжится, как я вообще смогу разработать пользовательский интерфейс?

Christopher H. 09.04.2019 02:18

@zackraiyan Представление дизайна Xamarin.Android не всегда самое лучшее ? и бывают случаи, когда вам нужно закрыть файл макета и снова открыть его или даже перезапустить Visual Studio, чтобы он снова заработал ... (Примечание: лично я использую Android Studio для его основных инструментов компоновки, и как только я буду доволен, перетащите подпапки «res» в папку ресурсов VS IDE (существует по крайней мере одно стороннее расширение VSIX, которое делает это автоматически, поэтому вы можете переключаться между Android Studio и Visual Studio в помощь в этом процессе, а я просто перетаскиваю....)

SushiHangover 09.04.2019 02:20

Можешь дать ссылку на расширение?

Christopher H. 09.04.2019 02:21

@zackraiyan Я не использую его и не могу вспомнить название, поищите его/их в магазине надстроек Visual Studio....

SushiHangover 09.04.2019 02:22

Без проблем. Еще раз спасибо, приятель.

Christopher H. 09.04.2019 02:28

Кстати, не могли бы вы дать мне небольшое руководство по пользовательским элементам управления в Xamarin.Android? Пожалуйста, взгляните на мой вопрос здесь

Christopher H. 09.04.2019 02:29

Другие вопросы по теме