目的:

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

背景:

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


Calligraphy
Calligraphy-Xamarin


书法(使用Android上下文包装器)拦截Android View的膨胀,并对其进行处理以产生所需的效果。

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

而不是引入特定于平台的另一种技术(Calligraphy-Xamarin),我想知道是否存在一种雄辩的方法来使用MvvmCross实现跨平台的动态字体主题引擎。

要将跨平台进程注入到View的MvvmCross创建中,它将执行隐式和显式字体主题化。

建议,想法和/或评论,有人吗?

最佳答案

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

无论在MvvmCross的容器中注册的内容是最后一个获胜者,因此您只需从MvvmCross的绑定后膨胀中注入修订版本即可。

希望这有道理...如果没有,请随时询问其他信息和/或进行说明。

附加信息...

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


检索以下项目并将其添加到您的解决方案(书法)
https://github.com/mikescandy/Calligraphy-xamarin
从您的Android专用项目中添加对此项目的引用。
检索以下项目并将其添加到您的解决方案(MvvmCross)
https://github.com/MvvmCross/MvvmCross
请勿在任何地方添加对此项目的引用。
将MvvmCross的MvxAndroidBindingContext.cs单元复制到您的Android项目中(建议更改名称空间),然后修改其...
公共虚拟View BindingInflate(int resourceID,ViewGroup viewGroup),以便在使用MvvmCross绑定创建View后,它将调用CalligraphyFactory.cs OnViewCreated()方法。 CalligraphyFactory :: OnViewCreated()是应用字体的地方,而MvxAndroidBindingContext :: BindingInflate()是使用MvvmCross绑定创建视图的地方。
检查MvvmCross如何在其项目中注册MvxAndroidBindingContext,然后对您的实现进行相同的操作,确保它是LAST,因此它将覆盖原始版本。如果我没记错的话,可以在Setup :: CreateApp()方法中完成。
确保正确初始化书法(请参阅其文档)。


您可能需要一段时间才能理解我写的内容,并且可能会出现一些错误,因为已经过去了很多时间,而且我没有能力检查它,但是我100%肯定会产生IDEA在Xamarin / MvvmCross中成功地包含了书法,因为毫无疑问,我确实可以使它正常工作。

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

10-13 03:34