ilomambo
ilomambo

Reputation: 8350

Android - Is it possible to overlay text on text?

I want to create special characters for math, for an android application.
And I wonder if it's is possible to overlay one character on top of another, or if there is some fine control on how text is rendered (and how do you go about doing that).

Upvotes: 3

Views: 658

Answers (4)

Ameen
Ameen

Reputation: 2586

I would extend the View class and then use the drawText method of the Canvas object you receive in the onDraw method. It sounds like you need fine control over coordinates of where text is being painted and extending View would give you just that. Take a look at Canvas.drawText and you can use the x and y coordinates to overlay text as you require.

Upvotes: 1

Dheeraj Vepakomma
Dheeraj Vepakomma

Reputation: 28737

If you need a general method to display math equations, have a look at jqMath. I think you can render it using a WebView.

Many math symbols have Unicode code points. Specifically, the Unicode code point for the symbol of a '+' inside a circle is U+2295. They can be rendered directly if the font supports it. For a list of some math symbols with corresponding Unicode code points check this Wikipedia article.

Also have a look at this question for resources using MathML in Java.

Upvotes: 8

Cameron
Cameron

Reputation: 3108

It could get really messy really quickly, but you would be able to accomplish it with a FrameLayout and several TextViews inside. For example, XML for a "0" overlapped with a "+", superscript "+" and subscript "-":

<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>

Resulting in:

Output

Upvotes: 0

Pratik Sharma
Pratik Sharma

Reputation: 13415

Try this:

This way you can add Superscript text :

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

Subscript text :

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

You can use this to add as many to your code.

Hope it helps you.

Thanks.

Upvotes: 0

Related Questions