Hyphenation in Android

Manfred Moser picture Manfred Moser · Dec 15, 2010 · Viewed 21k times · Source

As part of internationalizing an Android application I have come across the need to dynamically word wrap or hyphenate at the right position.

All my strings are externalized in strings.xml files but I have not found any documentation about hyphenation in Android.

I would like to be able to suggest hyphenation positions similar to how I can do it in LaTeX:

http://en.wikipedia.org/wiki/Hyphenation_algorithm

But I have not found any indication if this is possible. Is there anything in the framework I have missed? What are other people doing e.g. with Japanese strings that have no obvious position to break up a sentence? Do you just add spaces at the correct positions?

I could dynamically size the font to fit into certain layouts but for longer messages that go across multiple lines that won't work. What to do?

Answer

Robert Wm Ruedisueli picture Robert Wm Ruedisueli · Sep 9, 2012

Management of line breaks can be a hassle. The best option is to use UTF line-break modifier control characters since android supports full UTF

I know someone mentioned "soft-hyphen", but there are quite a few more.

You can also use the "Zero Width Space" between words on languages that lack spaces so you don't have to rely on dictionary interpretation. You can also use this as a soft-hyphen in languages that allow breaking of certain words over lines at certain points.

When using a compound word that you don't want broken, but you want the Text To Speech system to recognize it properly you should use "Word Separator" character. Don't use "Zero Width Non Breaking Space" as that has been deprecated due to it's use as BOM.

Finally, if you want a space but don't want a line break, use a simple non-breaking space.