【问题标题】:Android - Is it possible to overlay text on text?Android - 是否可以在文本上叠加文本?
【发布时间】:2012-11-30 02:24:22
【问题描述】:

我想为一个安卓应用程序创建数学的特殊字符。
我想知道是否可以将一个字符叠加在另一个字符之上,或者是否可以对文本的呈现方式进行一些精细控制(以及如何实现这一点)。

【问题讨论】:

  • 你能提供一些例子吗?
  • @PratikSharma 是的,其中一个例子,我希望下标和上标在同一个水平起点上对齐。或者我想通过一起渲染一个圆圈和一个星星来创建一个特殊的内乘符号。
  • 查看我为此发布的解决方案。如果您需要我的更多帮助,请告诉我。
  • 什么类型的文本?如果您的意思是将文本呈现为图形显示元素,那么当然可以。呈现为文本区域内容的文本可能会更复杂,尽管您可以巧妙地使用透明度将两个文本区域堆叠在一起。
  • 澄清一下,您是在问 1) 如何在 TextView 中显示数学符号(超出键盘键上的符号)?和第二个问题 2)如何精确地覆盖文本,例如在蓝色 H 上写一个黄色 H?

标签: android text rendering


【解决方案1】:

试试这个:

这样你可以添加上标文本:

TextView out_unit2 = (TextView) findViewById(R.id.out_unit2);
out_unit2.setText((Html.fromHtml("meter<sup><small>2</small></sup>")));

下标文字:

TextView out_unit2 = (TextView) findViewById(R.id.out_unit2);
out_unit2.setText((Html.fromHtml("meter<sub><small>2</small></sub>")));

您可以使用它在代码中添加尽可能多的内容。

希望对你有帮助。

谢谢。

【讨论】:

  • 我目前不在我的开发计算机旁。您能否举一个在同一文本上同时显示上标和下标并且都对齐的示例?此外,它如何解决文本覆盖文本的一般问题?我给出的例子只是其中的两个,我需要一个通用的解决方案。
  • 这并没有回答一般问题,而是为两种特定情况提供了可能的替代方案。
【解决方案2】:

它可能很快就会变得非常混乱,但你可以使用 FrameLayout 和里面的几个 TextView 来完成它。例如,XML 中的“0”与“+”、上标“+”和下标“-”重叠:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:textSize="@dimen/title_bar_font_size" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+"
        android:textSize="@dimen/title_bar_font_size" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+"
        android:textSize="12sp"
        android:layout_marginLeft="12sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="-"
        android:textSize="12sp"
        android:layout_marginLeft="12sp"
        android:layout_gravity="bottom" />
</FrameLayout>

导致:

【讨论】:

  • 这看起来真的很复杂。我无法想象必须在 XML 中定义每个数学符号/字形。此外,我需要它是动态的,因为用户将输入数学。这不是我必须显示的静态字符串。
【解决方案3】:

如果您需要显示数学方程式的通用方法,请查看jqMath。我认为您可以使用WebView 渲染它。

许多数学符号都有 Unicode 码位。具体来说,圆圈内“+”符号的 Unicode 代码点是 U+2295。如果字体支持,它们可以直接渲染。有关具有相应 Unicode 代码点的一些数学符号的列表,请查看this Wikipedia article

还可以查看 this question 以获取在 Java 中使用 MathML 的资源。

【讨论】:

  • 就在现场!我将学习这些资源,谢谢。应得的赏金!
【解决方案4】:

我将扩展 View 类,然后使用您在 onDraw 方法中收到的 Canvas 对象的 drawText 方法。听起来您需要对绘制文本的坐标进行精细控制,而扩展 View 将为您提供这一点。看看 Canvas.drawText ,您可以根据需要使用 x 和 y 坐标来覆盖文本。

【讨论】:

  • 非常感谢您的意见。我正在考虑做类似的事情,但 Dheeraj 的回答给了我一个可以渲染 Mathtml 的库,这是一个标准,并且该解决方案比自己绘制更好(更容易)。我需要写的所有数学都应该在 Mathtml 中有一个代码。
猜你喜欢
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 2023-03-22
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多