Я реализую доступность размера шрифта в приложении NativeScript-Vue.
Я хочу разрешить или запретить изменение размера метки с помощью атрибута XML как для Android, так и для iOS, но поведение и реализация на платформах различаются.
Android
По умолчанию все ярлыки масштабируются. Если я хочу, чтобы размер метки не изменялся, мне нужно вызвать функцию setTextSize
в событии loaded
, следуя этому решению.
<Label text="Not resizable" @loaded="$androidFixedLabelSize($event, 70)" />
Vue.prototype.$androidFixedLabelSize = function({ object }, fontSize) {
if (object.android)
object.nativeView.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, utils.layout.toDevicePixels(fontSize));
}
iOS
По умолчанию ярлыки не масштабируются. Чтобы изменить размер метки, мне нужно использовать плагин nativescript-accessibility-ext и добавить атрибут accessibilityAdjustsFontSize
.
<Label text="Resizable" accessibilityAdjustsFontSize="true" />
Необходимость добавления одного атрибута для фиксированного Android и одного для изменяемого размера iOS немного обременительна.
Я думал о том, чтобы изменить размер всех меток по умолчанию, и указать, хочу ли я, чтобы размер одного из них не изменялся, с помощью директивы или атрибута.
Могу ли я добиться этого с помощью настраиваемой директивы? Или что-то другое?
Обновлять
Мне удалось предотвратить изменение размера на Android с помощью директивы без жесткого кодирования размера шрифта, но есть проблема: update
запускается только для нескольких меток. el.nativeView.android
в bind
и inserted
хуках не определено.
Vue.directive("noresize", {
update: el => {
if (el.nativeView.android) {
el.nativeView.android.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, el.nativeView.fontSize);
} else {
// iOS code
}
}
});
В iOS я хотел бы просто установить accessibilityAdjustsFontSize="false"
, но это означает, что это правда по умолчанию.
Итак, следующий вопрос: как установить accessibilityAdjustsFontSize="true"
для всех компонентов Label в iOS?
setTextSize
(кроме того, свойстваandroid
илиios
отображаются неопределенными доupdate
хука). ListView не подходит для моей страницы с ярлыками максимум 120 (худший сценарий). У меня нет задержек рендеринга с использованием простых меток. Наконец, установка размера шрифта черезsetTextSize
- единственный способ избежать автоматического масштабирования, который я нашел. - person TomG   schedule 11.06.2019setTextSize
с px на основе этого решения, которое является единственным решением, которое я нашел для предотвращения автоматического масштабирования. Я не изучал код глубоко. Внимательно изучив документацию по Android, Я вижу, можно использовать DIP - person TomG   schedule 11.06.2019accessibilityAdjustsFontSize="true|false (default)"
), на Android это не так, и обходной путьsetTextSize
- единственное решение, которое я нашел для предотвращения автоматического масштабирования. - person TomG   schedule 11.06.2019