gpt4 book ai didi

android - 注入(inject)默认字体

转载 作者:行者123 更新时间:2023-11-30 02:18:12 24 4
gpt4 key购买 nike

目标:

通过 MvvmCross 在 Xamarin 中隐式(通过默认)和显式(通过 View 代码)动态主题字体。

背景:

确定了两个出色的 Android 字体自定义实现:

书法拦截 Android View 的膨胀(使用 Android Context Wrapper),并对其进行操作以产生所需的效果。

MvvmCross 已被采用并在 Android View 的膨胀期间执行其操作。

与其引入另一种特定于平台的技术 (Calligraphy-Xamarin),我想知道是否有一种 Eloquent 方法来使用 MvvmCross 实现跨平台、动态字体主题引擎。

将跨平台进程注入(inject)到 View 的 MvvmCross 创建中...这将执行隐式和显式字体主题。

建议、想法和/或意见,有人吗?

最佳答案

解决方案是将 MvvmCross 绑定(bind) inflate 替换为修改后的版本,该版本会首先调用 Calligraphy 的 inflate 逻辑。请记住,它们是开源项目,因此这可能需要维护源代码分支。

在 MvvmCross 的容器中注册的内容最后获胜——因此您只需将修改后的版本注入(inject)到 MvvmCross 的最后绑定(bind) inflate 中。

希望这是有道理的……如果没有,请不要犹豫,要求提供更多信息和/或说明。

附加信息...

我无法再访问该源代码,也无法为您创建有效解决方案的开发环境。也就是说,对于使用 Xamarin 创建 Android 解决方案的软件开发人员来说,以下信息应该足够了。

  1. 检索以下项目并将其添加到您的解决方案中(书法) https://github.com/mikescandy/Calligraphy-xamarin从您的 Android 特定项目添加对此项目的引用。

  2. 检索以下项目并将其添加到您的解决方案 (MvvmCross) https://github.com/MvvmCross/MvvmCross不要在任何地方添加对该项目的引用。

  3. 将 MvvmCross 的 MvxAndroidBindingContext.cs 单元复制到您的 Android 项目中(建议更改命名空间),然后修改其...public virtual View BindingInflate(int resourceID, ViewGroup viewGroup) 这样它将在使用 MvvmCross 绑定(bind)创建 View 后调用 CalligraphyFactory.cs OnViewCreated() 方法。 CalligraphyFactory::OnViewCreated() 是应用字体的地方,MvxAndroidBindingContext::BindingInflate() 是应用 MvvmCross 绑定(bind)创建 View 的地方。

  4. 查看 MvvmCross 如何在其项目中注册 MvxAndroidBindingContext,然后对您的实现执行相同的操作,确保它是最后的,因此它将覆盖原始的。如果我没记错的话,这将在 Setup::CreateApp() 方法中完成。

  5. 确保正确初始化 Calligraphy(请参阅其文档)。

你可能需要一段时间才能理解我写的东西,可能会有一些错误,因为已经过去了很多时间,我没有能力检查它,但我 100% 确定IDEA 将导致在 Xamarin/MvvmCross 中成功包含 Calligraphy,因为毫无疑问我确实让它工作了。

关于android - 注入(inject)默认字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28950588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com