问题标签 [mongolian-vertical-script]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 具有工作选择、光标位置等的自定义旋转 EditText 视图
我想做的事
我想制作一个旋转和翻转的 EditText 视图,它具有普通 EditText 视图的所有属性。
我的问题
我已经成功地制作了(在 SO 用户的帮助下)一个自定义的 EditText 视图,它既可以旋转又可以翻转。这是通过覆盖 onDraw 方法完成的。但是,光标和突出显示消失了,longtouch 事件仍然指示原始文本位置。基本上,视图被重绘,但触摸事件没有。
如何让触摸事件、突出显示和光标也被旋转和翻转?
我读过的
EditText 随选择缩放(一个类似的问题,但不完全相同。)
如何制作自定义 Edittext,使其看起来像在 android 中旋转 45 度(@CommonsWare 指出一种解决方案,即需要通过触摸事件完成附加工作。那是什么工作?)
http://developer.android.com/training/graphics/opengl/touch.html(有帮助,但我不明白如何在这种情况下应用它。)
我试过的
我制作了一个扩展 EditText 的自定义视图。其中覆盖了 onDraw 方法来旋转和翻转画布。我覆盖了 onMeasure 以使视图具有适合布局的尺寸。
布局 xml 没有什么特别之处。
(更新)这个问题是另一个尝试,但最后我无法让它工作:除了onDraw()之外,invalidateDrawable()是否需要被覆盖?
进一步说明
如果您想知道为什么我要旋转和翻转 EditText 视图,这就是原因。传统的蒙古文是从左到右垂直书写的。结合垂直镜像的蒙古字体,将文本顺时针旋转 90 度并翻转它会产生具有正确换行的可读输出。
这不是一个模糊或孤立的问题。传统蒙古语用户数以百万计,但安卓应用却很少。其中,我还没有找到任何开源的。如果我能让这个工作,我想让其他开发人员可以使用代码。
我现在在看哪里
(更新)我正在考虑View
从头开始创建一个自定义视图(扩展)以创建类似TextView
. 这TextView
可以从应用程序中更新以充当EditText
视图。在这种情况下,我只需要使用普通字体将文本旋转 90 度,但不需要翻转它。但是,我必须自己进行换行。
但是,在阅读@Chitrang 的回答后,我想我可以通过扩展 TextView 来做类似的事情。然后我可以避免自己做换行的麻烦。
图片更新
蒙古文是从上到下,从左到右书写的。现在我正在使用这个键盘在文本周围移动光标,但我希望能够触摸屏幕将光标移动到某个位置。
android - 在 Android 中使用 OpenType 字体支持复杂的文本布局
我想要什么
我想将 OpenType 字体放在我的资产文件夹中,并用于在我的 Android 应用程序中为使用复杂文本布局 (CTL)Typeface.createFromAsset
的语言呈现 Unicode 文本。
背景
我想为传统的蒙古文字做这个,但对于其他语言,如泰语、阿拉伯语、印度语和许多少数民族语言,这是同样的问题(所以我听说)。OpenType 字体已经包含正确显示文本所需的信息。问题是并非所有软件都支持 OpenType 渲染。有些会,但有些不会。据我所知,Android 过去没有,但现在可能有?
我的问题
Android Lollipop 现已推出。Android 中是否支持 OpenType 字体?
如果仍然没有什么容易的,那么过程是什么?我听说过 Pango 和 Harfbuzz(声称可以与 Android 一起使用)之类的东西,但我还没有找到任何简单的说明或教程来说明如何实现它们。我发现的最接近的东西是Indic text renderer,但它远非易于理解。
StackOverflow 上的相关问题
这些问题表明人们对这个话题很感兴趣,但在我看来,这些问题并没有得到令人满意的回答。其中一些也已过时。我想知道是否有当前的解决方案。
- 在 Android 中使用 OpenType 字体功能
- 在 Andorid 中显示拦截并支持非拉丁语或复杂脚本语言
- Android 中的 CTL(复杂文本语言)支持(原文如此)
- 支持 SDK 但不支持 PhoneGap 的印度语语言
- HarfBuzz 入门
- 使用 harfbuzz 和 freetype 的 indic-text-renderer
我试过的
我编写了自己的渲染引擎来显示传统的蒙古语 Unicode 文本。但是,如果已经有可用的 OpenType 字体,那么为特定语言编写渲染引擎就是在重新发明轮子。此外,它不容易适应其他语言。
ios - 如何在 Swift 中为 iOS 制作垂直文本 UILabel 和 UITextView?
如果您是根据标题提出这个问题但对蒙古语不感兴趣,您可能正在寻找此问答:
我一直在学习 Swift,以便为传统的蒙古语开发 iOS 应用程序。问题是传统的蒙古文是从上到下,从左到右垂直书写的。我的问题是如何垂直显示文本并且仍然有换行工作?
如果你陪我一会儿,我会试着更清楚地解释这个问题。下面是我想要实现的那种文本视图的图像。万一外国脚本让你失望,我已经包含了遵循相同模式的英文文本。事实上,如果应用程序有任何英文文本要显示,它应该是这样的。
对于简单的单行 UILabel,顺时针旋转 90 度即可。但是,对于多行 UITextView 我需要处理换行。如果我只是简单地旋转 90 度,那么写的第一件事最终会在最后一行。
到目前为止,我已经制定了一个我认为可以克服这个问题的计划:
- 制作一个自定义字体,其中所有字母都垂直镜像。
- 将文本视图顺时针旋转 90 度。
- 水平镜像文本视图。
那应该照顾文本换行。
我可以做镜像字体。但是,我不知道如何为 UITextView 的旋转和镜像进行 Swift 编码。我发现以下链接似乎为解决方案的某些部分提供了提示,但它们都在 Objective C 中,而不是在 Swift 中。
应用商店里有传统的蒙古语应用(比如this和this),但我还没有找到任何人分享他们的源代码,所以我不知道他们在幕后做了什么来显示文本。我计划将我的代码开源,这样其他人将来为数百万阅读传统蒙古语的人开发应用程序就不那么困难了。您能为这项工作提供的任何帮助将不胜感激,不仅是我,还有蒙古人民。即使您不了解自己,对这个问题进行投票以使其更加明显也会有所帮助。
更新
@sangonz 的答案仍然是一个很好的答案,但我暂时将其取消标记为已接受的答案,因为我无法让一切正常工作。具体来说:
- 启用滚动(通过将自定义视图嵌入到滚动视图中或通过子类化 UIScrollView)。在 github 项目中,@sangonz 说这应该很容易,但它不适合我。
- 在方向改变时重新布局(而不是拉伸)字线。我认为通过更多的研究来解决这个问题应该不会太难。
- 为什么文本行不一直到视图的边缘?底部有一个很大的空隙。
如何解除自定义垂直视图的 NSTextStorage 与其他 UITextView 的链接。(见这个问题)
到目前为止,我一直在使用我上面提出的原始方法,但我真正想要的是得到类似@sangonz 提议的东西。
我现在也在考虑替代方法,例如
- 使用 Core Text,缺点:感觉像是在重新发明轮子
- 使用 WebKit,缺点:Apple 不再使用 WebKit 作为他们的
UITextView
android - 如何在Android中制作传统蒙文TextView
您如何为 Android 应用程序制作垂直(从左到右换行)蒙古文脚本 TextViews?
背景
Android 对世界上的许多语言都有相当好的支持,甚至包括阿拉伯语和希伯来语等 RTL 语言。但是,没有内置支持像传统蒙古语这样的自上而下的语言(在内蒙古仍然非常活跃,不要与西里尔蒙古语混淆)。下图显示了为清楚起见添加了英文的文本方向。
由于此功能未内置在 Android 中,因此它使应用程序开发的几乎每个方面都变得异常困难。网上可用的信息也非常非常少。(少数几个相关的 SO 问题之一甚至没有一个好的答案。)传统蒙古语的应用程序开发人员有很多,但无论是出于商业原因还是其他原因,他们似乎都没有将代码开源。
由于这些困难,我想提出一系列 StackOverflow 问题,这些问题可以作为收集与传统蒙古语应用程序开发相关的一些更困难的编程问题的答案的中心位置。即使您不懂蒙古语,您也可以帮助查看代码、发表评论和问题、给出答案甚至对问题进行投票,我们将不胜感激。
蒙古文垂直TextView
一个蒙古文 TextView 需要具备以下要求:
- 支持传统的蒙古字体
- 从上到下垂直显示文本
- 换行从左到右。
- 换行出现在空格处(同英文)
(让TextView支持蒙古字体不是绝对要求,因为TypeFace可以稍后设置,但在使用许多TextView时很方便。)
我的答案如下,但我欢迎其他解决此问题的方法。
本系列其他相关问题:
- 如何在Android中制作传统的蒙古文EditText
- 如何在Android中制作传统蒙文ListView
- 更多内容...(吐司、对话框、菜单)
IOS:
android - 如何在Android中制作传统蒙文ListView
如何在 Android 应用程序中为垂直蒙古文脚本制作水平滚动的 ListView?
背景
Android 对世界上的许多语言都有相当好的支持,甚至包括阿拉伯语和希伯来语等 RTL 语言。但是,没有内置支持像传统蒙古语这样的自上而下的语言(在内蒙古仍然非常活跃,不要与西里尔蒙古语混淆)。下图显示了为清楚起见添加了英文的文本方向。
由于此功能未内置在 Android 中,因此它使应用程序开发的几乎每个方面都变得异常困难。对于水平 ListView 尤其如此,Android 中不支持开箱即用。网上可用的信息也非常非常少。传统蒙古语的应用程序开发人员有很多,但无论是出于商业原因还是其他原因,他们似乎都没有将代码开源。
由于这些困难,我想提出一系列 StackOverflow 问题,这些问题可以作为收集与传统蒙古语应用程序开发相关的一些更困难的编程问题的答案的中心位置。即使您不懂蒙古语,您也可以帮助审查代码、发表评论和问题、给出答案甚至对问题进行投票,我们将不胜感激。
带有垂直脚本的蒙古语水平滚动ListView
一个蒙古语 ListView 需要具备以下要求:
- 从左到右水平滚动
- 触摸事件的工作方式与普通 ListView 相同
- 与普通 ListView 一样支持自定义布局
还需要支持蒙古文 TextView支持的所有内容:
- 支持传统的蒙古字体
- 从上到下垂直显示文本
- 换行从左到右。
- 换行出现在空格处(同英文)
下图显示了蒙古语 ListView 应具备的基本功能:
我的答案如下,但我欢迎其他解决此问题的方法。
本系列其他相关问题:
- 如何在Android中制作传统蒙文TextView
- 如何在Android中制作传统的蒙古文EditText
- 更多内容...(吐司、对话框、菜单)
IOS:
ios - 如何通过从 Swift 中的 UIScrollView 子类化来制作垂直 UITextView?
背景
我是 iOS 开发的新手,但为了开始使用垂直蒙古文脚本制作最基本的应用程序,我需要一个垂直的UITextView
. 我还没有找到任何其他蒙古应用程序开发人员共享他们的代码,所以我正在尝试自己制作。蒙古语从上到下书写,从左到右换行,如下图所示:
滚动应该是水平的(从左到右)。
在上一个问题中,我提出了一个镜像字体与旋转和镜像的组合UITextView
(因为这是我在 Android 中所做的)。但是,在阅读了这个答案并进一步研究了 iOS 的做事方式(比如使用TextKit
)之后,我认为UIVerticalTextView
从头开始创建类似的东西而不是弄乱正常的UITextView
. 而且由于我看到UITextView
UIScrollView的继承,我认为我应该继承子类UIScrollView
来制作UIVerticalTextView
.
我现在在哪里
我上面提到的答案是子类UIView
,但我在滚动工作时遇到了很多麻烦。这是我想要子类化的另一个原因UIScrollView
。此外,当方向发生变化时,该解决方案也没有重新排列每行中的单词。
我收集了以下部分,但我不知道如何将它们放在一起:
- NSTextStorage - 这不应该有什么不同。它只会存储蒙古语 Unicode 文本和任何样式信息。
- NSTextContainer - 需要切换高度和宽度以提供垂直文本容器大小。(无论如何,我认为是这样。除非这可以在其他地方完成。)
- NSLayoutManager - 这里有什么特别需要做的,还是由 NSLayoutManager 处理的
UIVerticalTextView
? UIVerticalTextView - 这将是一个子类,
/li>UIScrollView
但需要添加和/或覆盖哪些方法?
更新
这些问题试图将问题分解成更小的部分:
并尝试使用不同的方法:
- 旋转视图是否与自动布局兼容?
- 在 layoutSubviews 中旋转视图这实际上现在有一个可行的解决方案。但是,它基本上涉及将三个视图堆叠在一起。正如我在当前问题中提出的那样,我仍然希望创建一个使用 TextKit 的自定义 UIScrollView 子类。
ios - 自定义字体在 IB 中显示,但在模拟器中不显示
我已经设置了 aUITextView
和 aUILabel
以使用自定义字体。(它是垂直镜像的蒙古字体,但我还包括了英文文本,以便您可以看到效果。) 文字显示在界面生成器中,但在模拟器中,大多数字符UITextView
只是空框。奇怪的是,在UILabel
模拟器中确实显示正确的字符。
我如何让它们也显示在其中UITextView
?
笔记:
- 我正在使用 Xcode 版本 6.3.2。从这个 SO Q&A我知道自定义字体应该与 IB 中的 Xcode 6 一起使用。
- 我已将我的字体文件添加到项目中,并从自定义字体列表中
UITextView
为UILabel
. - 我在我的项目中添加了键“应用程序提供的字体”,
Info.plist
并向其中添加了我的自定义字体。 这个问题是一个非常相似的问题(但不同,因为它没有提到
/li>UITextView
andUILabel
问题)。在撰写本文时,该问题的 OP 尚未表明投票最多的答案是否有帮助。我运行了该答案中的代码以确认我的字体确实在捆绑包中。我得到了以下结果,它确认它在捆绑包中,所以仍然不能解决我的问题。
有没有人看到我的错误或有任何其他想法?
更新
在收到@darkheartfelt 的反对票并在下面对我的回答发表评论后,我重新创建了我原来的问题,以为我可能错过了一些东西。尽管在 iOS 9 中字体在模拟器中的显示有所不同,但基本问题仍然存在:在 IB 中看起来还可以,但在模拟器中却不行。
该问题可以重现如下(使用 Xcode 7.1.1):
- 开始一个新的单视图项目。
- 将字体添加到项目中(可以从相关的 github 项目在这里下载)
- 在 Info.plist 文件中添加“应用程序提供的字体”,字体名称为“ChimeeWhiteMirrored.ttf”。
- 确认目标的“Copy Bundle Resources”包含 ChimeeWhiteMirrored.ttf。
UITextView
在情节提要中添加一个。- 在 IB 属性检查器中粘贴以下文本:
1-10: one two three four five six seven eight nine ten
- 在 IB 属性检查器中,将字体设置为自定义,将系列设置为 ChimeeWhiteMirrored。
这重现了特殊字符的问题,正如我在下面的回答中所描述的,我发现解决这个问题的唯一方法是在代码中设置字体。
如果我错了或遗漏了什么,请告诉我。在那之前,我将不得不继续使用下面我接受的答案。
ios - 在 Swift 中使用 Unicode 代码点
如果您对蒙古语的细节不感兴趣,但只想快速了解在 Swift 中使用和转换 Unicode 值,请跳到已接受答案的第一部分。
背景
我想为传统蒙古语呈现 Unicode 文本以在 iOS 应用程序中使用。更好的长期解决方案是使用AAT 智能字体来呈现这个复杂的脚本。(这样的字体确实存在,但它们的许可证不允许修改和非个人使用。)但是,由于我从未制作过字体,更不用说 AAT 字体的所有渲染逻辑,我只是打算自己进行渲染斯威夫特现在。也许在以后的某个日子里,我可以学会制作一种智能字体。
在外部我将使用 Unicode 文本,但在内部(为了在 a 中显示UITextView
)我会将 Unicode 转换为存储在哑字体中的单个字形(使用 Unicode PUA值编码)。所以我的渲染引擎需要将蒙古语 Unicode 值(范围:U+1820 到 U+1842)转换为存储在 PUA 中的字形值(范围:U+E360 到 U+E5CF)。无论如何,这是我的计划,因为这是我过去在 Java 中所做的,但也许我需要改变我的整个思维方式。
例子
下图显示了用两种不同形式的字母u(红色)用蒙古语写了两次su 。(蒙古语是垂直书写的,字母连接起来就像英文的草书字母一样。)
在 Unicode 中,这两个字符串将表示为
Swift 中的自由变体选择器 (U+180B)suForm2
被(正确地)识别为在其前面String
带有u (U+1826) 的单位。Swift 认为它是一个单一的字符,一个扩展的字素簇。但是,为了自己进行渲染,我需要将u (U+1826) 和 FVS1 (U+180B) 区分为两个不同的 UTF-16 代码点。
出于内部显示目的,我会将上述 Unicode 字符串转换为以下呈现的字形字符串:
问题
我一直在玩 SwiftString
和Character
. 它们有很多方便的地方,但由于在我的特殊情况下我只处理 UTF-16 代码单元,我想知道我是否应该使用旧的NSString
而不是 Swift 的String
. 我意识到我可以String.utf16
用来获取 UTF-16 代码点,但转换回String
不是很好。
坚持使用String
andCharacter
还是应该使用NSString
and会更好unichar
吗?
我读过的
为了清理页面,已隐藏此问题的更新。查看编辑历史。
ios - Swift 中自定义 UIView 的加载时间很慢
背景
为了使垂直蒙古文脚本水平滚动的文本视图,我制作了一个自定义UIView
子类。该类接受 a UITextView
,将其放入 a UIView
,旋转并翻转该视图,然后将该视图放入 parentUIView
中。
旋转和翻转的目的是使文本垂直,从而使换行正常工作。将所有内容粘贴在父级中的目的UIView
是让自动布局可以在故事板中工作。(在此处查看更多详细信息。)
代码
我有一个可行的解决方案。github 上的完整代码在这里,但我创建了一个新项目并删除了所有我可以使用的不必要代码以隔离问题。下面的代码仍然执行上面描述的基本功能,但仍然存在下面描述的加载缓慢问题。
问题
我注意到自定义视图加载非常缓慢。我是 Xcode Instruments 的新手,所以我观看了有用的视频Debugging Memory Issues with Xcode and Profiler和Time Profiler。
之后,我尝试在自己的项目中找到问题。似乎无论我使用 Time Profiler 还是 Leaks 或 Allocations 工具,它们都表明我的类init
方法做了太多的工作。(但我从之前的缓慢加载时间就知道了。)这是分配工具的屏幕截图:
我没有展开所有的调用树,因为它不合适。为什么要创建这么多对象?当我制作一个三层自定义视图时,我知道它并不理想,但是调用树中似乎发生的层数是荒谬的。我究竟做错了什么?
ios - 具有可变单元格高度的 UITableView:在 IB 中工作但不是以编程方式
TL;博士
我以编程方式创建的表格视图单元格没有根据其自定义视图的内在内容高度调整大小,即使我正在使用UITableViewAutomaticDimension
和设置顶部和底部约束。
问题可能在于我UITableViewCell
对子类的实现。请参阅下面的代码无法以编程方式工作 > 代码 > MyCustomCell.swift。
目标
我正在尝试为自定义蒙古语键盘制作建议栏。蒙古文是竖写的。在 Android 中,它看起来像这样:
进步
我了解到我应该使用UITableView
具有可变单元格高度的 a,它从 iOS 8 开始可用。这需要使用自动布局并告诉表格视图使用单元格高度的自动尺寸。
我在此过程中必须学习的一些东西在我最近的 SO 问题和答案中都有体现:
所以我已经到了拥有支持内在内容大小的垂直标签的地步。这些标签位于我的自定义表格视图单元格中。正如下一节中所描述的,当我在情节提要中执行此操作时,它们会起作用,但当我以编程方式创建所有内容时则不会。
在IB工作
为了隔离问题,我创建了两个基本项目:一个用于我使用情节提要的地方,另一个用于我以编程方式完成所有操作的地方。故事板项目有效。如下图所示,每个表格视图单元格都会调整大小以匹配自定义垂直标签的高度。
在IB
我设置约束以固定顶部和底部以及使标签居中。
代码
ViewController.swift
MyCustomCell.swift
不能以编程方式工作
由于我希望建议栏成为最终键盘的一部分,因此我需要能够以编程方式创建它。但是,当我尝试以编程方式重新创建上述示例项目时,它不起作用。我得到以下结果。
单元格高度未调整大小,并且自定义垂直标签彼此重叠。
我还收到以下错误:
仅警告一次:检测到约束模糊地建议 tableview 单元格的内容视图高度为零的情况。我们正在考虑意外折叠并使用标准高度。
在 Stack Overflow 上多次出现此错误:
- iOS8 - 约束含糊地暗示高度为零
- 检测到约束模糊地表明高度为零的情况
- 自定义 UITableviewcell 高度未正确设置
- ios 8 (UITableViewCell) : 约束模糊地建议 tableview 单元格内容视图的高度为零
然而,对于这些人中的大多数人来说,问题在于他们没有同时设置顶部和底部引脚约束。我是,或者至少我认为我是,如下面的代码所示。
代码
ViewController.swift
MyCustomCell.swift
我认为问题可能出在此处,因为这是与 IB 项目的主要区别。
补充代码
我还将包括我在上述两个项目中使用的自定义垂直标签的代码,但由于 IB 项目有效,我认为主要问题不在这里。
更新
项目的全部代码都在这里,所以如果有兴趣尝试一下,只需新建一个项目并将上面的代码剪切并粘贴到以下三个文件中:
- ViewController.swift
- MyCustomCell.swift
- UIMongolSingleLineLabel.swift