«ПРОВЕРКА АВТОМАТИЧЕСКОГО РАЗМЕРА» Размер шрифта слишком велик, поэтому часть строки обрезается (когда текст слишком большой, часть обрезается и заменяется многоточием).
"тестовый текст" Слишком маленький размер шрифта.FontSize - это треть его соответствующего вида (оценка).
Как установить fontSize элемента равным размеру ширины элемента (или содержащего представления)?Используйте приведенные выше примеры в качестве ссылки - «тестовый текст» будет занимать гораздо больше вида, а «ИСПОЛЬЗОВАНИЕ АВТОМАТИЧЕСКОГО РАЗМЕРА» займет гораздо меньше.
ПРИМЕЧАНИЕ. Черные поля обозначают другие элементы.
Желаемой целью является элемент (метка и / или содержащий вид), который при изменении текста во время выполнения устанавливается в fontSize в соответствии с назначенным текстом и доступной для него шириной (он остается постоянным после сборки).Чтобы весь текст можно было просмотреть в строке и использовать доступную для него ширину.
Цель состоит в том, чтобы поддерживать несколько платформ на различных устройствах с разным масштабированием.
Что было опробовано?NamedSizes на основе идиомы (телефон / планшет / и т. Д.) И манипулирования ими с помощью умножения и деления на основе ОС (платформы, то есть IOS, Android и т. Д.).Это не может быть лучшей практикой, и должен быть способ добиться этого.
Следуя руководству Xamarin.Forms по «подгонке текста к доступному размеру» или «эмпирически подгонке текста», вы получите результаты, которые не так хороши.ожидается .. "CH5: Работа с размерами"
Пожалуйста, сообщите о передовой практике и / или следующих шагах.
Структура
struct FontCalc
{
public FontCalc(Label label, double fontSize, double containerWidth)
: this()
{
// Save the font size.
FontSize = fontSize;
// Recalculate the Label height.
label.FontSize = fontSize;
SizeRequest sizeRequest =
label.Measure(containerWidth, Double.PositiveInfinity);
// Save that height.
TextHeight = sizeRequest.Request.Height;
}
public double FontSize { private set; get; }
public double TextHeight { private set; get; }
}
Реализация
Метка метки;
public EmpiricalFontSizePage()
{
label = new Label();
Padding = new Thickness(0, Device.RuntimePlatform == Device.iOS ? 30 : 0, 0, 0);
ContentView contentView = new ContentView
{
Content = label
};
contentView.SizeChanged += OnContentViewSizeChanged;
Content = contentView;
}
void OnContentViewSizeChanged(object sender, EventArgs args)
{
// Get View whose size is changing.
View view = (View)sender;
if (view.Width <= 0 || view.Height <= 0)
return;
label.Text =
"This is text displayed. Does it work?";
// Calculate the height of the rendered text.
FontCalc lowerFontCalc = new FontCalc(label, 10, view.Width);
FontCalc upperFontCalc = new FontCalc(label, 100, view.Width);
while (upperFontCalc.FontSize - lowerFontCalc.FontSize > 1)
{
// Get the average font size of the upper and lower bounds.
double fontSize = (lowerFontCalc.FontSize + upperFontCalc.FontSize) / 2;
// Check the new text height against the container height.
FontCalc newFontCalc = new FontCalc(label, fontSize, view.Width);
if (newFontCalc.TextHeight > view.Height)
{
upperFontCalc = newFontCalc;
}
else
{
lowerFontCalc = newFontCalc;
}
}
// Set the final font size and the text with the embedded value.
label.FontSize = lowerFontCalc.FontSize;
label.Text = label.Text.Replace("??", label.FontSize.ToString("F0"));
}
(код реализации из документов XF, указанных выше)