2016-04-14 2 views
1

У меня есть проект Xamarin для Android, в котором я использую файлы размеров, чтобы указать размеры текста, paddings, поля и т. Д. Для разных размеров/разрешений экрана.Xamarin Android - настройка TextSize из файла размеров

Я заметил, что существует явная разница между установкой значения непосредственно в макете и внутри кода.

Например, если добавить следующее к TextView макета XML

android:textSize="@dimen/nav_tile_text_size"

, то я бы ожидать, что результат будет таким же, как делал это в коде

myTextView.SetTextSize(ComplexUnitType.Sp, _context.Resources.GetDimension(Resource.Dimension.nav_tile_text_size))

Файл размеров содержит:

<dimen name="nav_tile_text_size">17sp</dimen>

но полученный интерфейс показывает, что размер не был правильно применен

Emulator Screenshot

Что я здесь отсутствует ??

+0

Вы попробовали с другим устройством? Я думаю, что проблема связана с sp. –

+0

@AkshayKulkarni. Несмотря на то, что в некоторых областях документация неясна, определенно об использовании SP для размеров текста, чтобы он учитывал любое масштабирование шрифта, применяемое пользователем. Он отлично работает при настройке непосредственно в макете. – DilbertDave

ответ

2

Правильно. Вам нужно будет либо использовать

myTextView.SetTextSize(Android.Util.ComplexUnitType.Sp, Resources.GetDimension(Resource.Dimension.nav_title_text_size)/Resources.DisplayMetrics.Density); 

Единица, в противном случае умножается на плотность телефона. Я лично проверил этот код, и он работает

+0

Знаете, я думал, что это может быть так, но, прочитав следующее на странице разработчика Android, я был смущен: «Аналогично, вы должны предпочесть sp (не зависящий от масштаба пиксель) для определения размеров текста. Масштабный коэффициент sp зависит от пользовательская настройка, а система масштабирует размер так же, как и для dp ». Мне не нужно делать какую-либо пост-обработку при чтении в значении DP, поэтому я не думал, что мне нужно значение SP - возможно, я еще не столкнулся с проблемой с DP. – DilbertDave

+0

Ну, я тестировал это на нескольких устройствах (mdpi> xxhdpi), и это, безусловно, кажется, что это решение. Я считаю это странным, хотя установка одного и того же свойства (TextSize) с использованием того же значения должна выполняться по-другому. Вероятно, для этого есть причина, но было бы полезно, если бы это было где-то в документации. – DilbertDave

+0

Ну вот аномалия - я добавил еще один TextView и установил размер текста, как указано выше. Когда я запускаю приложение на Sony Tablet S (10-дюймовый запуск 4.0.3 и классифицируется как xlarge), все три строки текста имеют одинаковый размер! Кроме того, если я устанавливаю «Большой текст» в доступности, все строки увеличиваются в размере, но первый (установленный в макете) теперь меньше, чем два других (одинаковых, увеличенных, высота). – DilbertDave