Я действительно делал это раньше.Вот общее описание того, что я сделал:
Поместите файлы мультиплатформенных значков в ваш .NetStandard проект как Встроенные ресурсы .Это означает, что я нашел все различные разрешения, предоставленные Google (_xxhdpi, _xhdpi, _hdpi, _mdpi и т. Д.), А затем переименовал их в следующее:
- icon@¾x.png
- icon.png
- icon@1½x.png
- icon@2x.png
- icon@3x.png
- icon@4x.png
А затем поместите их в папку Resources / Google в моем проекте ( FormsFirebase.Ui ).Так, например, EmbeddedResourceId для первого файла в приведенном выше списке равен FormsFirebase.Ui.Resources.Google.icon@¾x.png
.
. Как вы вскоре увидите, переименование этих файлов, как показано выше, позволит Forms9Patch.Button
выберите правильное изображение для правильного разрешения экрана (чтобы оно выглядело великолепно) - избавляя вас от необходимости управлять этим.Аналогично, включение их в проект .NetStandard означает, что они доступны для всех платформ - освобождая вас от необходимости разбираться в этом несколько раз!
В вашем Forms9Patch.Button
см.выше значок изображения в разрешении независимой моды.Это можно сделать несколькими способами.Один из более подробных способов:
var myButton = new Forms9Patch.Button
{
Text = "Sign in with xxhdpi",
TextColor=Color.White,
FontSize=14,
FontFamily="sans-serif",
WidthRequest=60,
IconImage = new Forms9Patch.Image
{
Source = Forms9Patch.ImageSource.FromMultiResource("FormsFirebase.Ui.Resources.Google.icon", GetType().Assembly),
Padding = 1,
},
Spacing = 4,
TintIcon = false,
BackgroundColor = Color.FromRGB(81,134,236)
};
Несколько замечаний:
Сначала я установил TintIcon
вfalse
, чтобы не подкрасить значок в тот же цвет, что и TextColor
.Также я установил IconImage
, а не BackgroundImage
.Это необходимо для того, чтобы убедиться, что изображение равноценно тексту, а не слою под ним.
Также обратите внимание, что я могу установить отступы IconImage
, а также Forms9Patch.Button.Padding
и Forms9Patch.Button.Spacing
(расстояние между IconImage
и Text
или HtmlText
, в зависимости от того, установлено ли для HasTightSpacing
значение true).
Вместо использования нескольких файлов .png
(для каждого разрешения экрана), если у вас есть.svg
версия вашего изображения доступна, вы можете использовать ее вместо этого.Гораздо меньше работы!
Еще одна вещь, которая может вас заинтересовать: подобно тому, как Forms9Patch обрабатывает изображения независимо от платформы (помещая их в кроссплатформенный проект в качестве встроенных ресурсов),сделать то же самое со шрифтами.Это означает, что вы можете поместить файл шрифта (.ttf или .otf) в ваш кроссплатформенный проект и использовать его EmbeddedResourceId в качестве значения для FontFamily
.И это поведение может быть расширено до элементов Xamarin.Forms с помощью Forms9Patch.EmbeddedResourceFontEffect
.
Теперь немного прозелитизма (извините, если это не относится к вам):Я вижу, что вы использовали XAML для своего примера кода.Обратите внимание, что я не в своем ответе.Если вы новичок в .Net и / или Xamarin.Forms, я настоятельно рекомендую не использовать XAML.Не поймите меня неправильно, XAML великолепен - он просто не для начинающих.Зачем?Слишком много вещей происходит под одеялом, которые, как новичок, могут сбить вас с толку и замедлить.Скорее, я бы порекомендовал вам написать весь ваш пользовательский интерфейс на C #, чтобы вы могли научиться управлять своими свойствами и узнать, как на самом деле работает привязка.Как только вы освоите создание очень эффективных макетов с наилучшим «контекстно-зависимым» использованием связывания, тогда вы готовы к XAML.Для меня настоящим тестом была возможность сделать очень сложную разметку ячейки в большом списке в ListView плавно прокручивать на недорогом телефоне Android.После этого опыта я смог воспользоваться всеми преимуществами разработки на XAML (а их немало), не беспокоясь о том, что меня сковывают мои ошибки новичка.