Разрешить / запретить изменение размера шрифта ярлыка - PullRequest
2 голосов
/ 11 июня 2019

Я реализую доступность размера шрифта в приложении NativeScript-Vue.
Я хочу разрешить или запретить изменение размера Label с помощью атрибута 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?

1 Ответ

0 голосов
/ 17 июня 2019

Благодаря Мортену Шегрену, разработчику @ nota / nativescript-accessibility-ext , я смог добавить глобальное событие.Изменение размера специальных возможностей теперь применяется ко всем компонентам Label, если только атрибут noResize не равен true.

app.js

import '@nota/nativescript-accessibility-ext';
import { Label } from 'tns-core-modules/ui/label';

// code

Label.on(Label.loadedEvent, ({ object }) => {
    if (object.noResize) {
        if (object.android) {
            object.nativeView.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, object.fontSize);
        }
    } else {
        object.accessibilityAdjustsFontSize = "true";
    }
 });

<Label text="Don't resize" noResize="true" />
...