48

Android アプリケーションの国際化の一環として、適切な位置で動的にワード ラップまたはハイフネーションを行う必要があることに気付きました。

私の文字列はすべてstrings.xmlファイルに外部化されていますが、Androidのハイフネーションに関するドキュメントは見つかりませんでした.

LaTeXでできるのと同じように、ハイフネーションの位置を提案できるようにしたいと思います:

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

しかし、これが可能かどうかの兆候は見つかりませんでした。フレームワークに見逃したものはありますか?文を分割する明確な位置がない日本語の文字列など、他の人は何をしていますか? 正しい位置にスペースを追加するだけですか?

特定のレイアウトに収まるようにフォントのサイズを動的に変更できますが、複数の行にまたがる長いメッセージでは機能しません。何をすべきか?

4

6 に答える 6

13

Android 6 Marshmellow からの新しい機能です。

これを TextView xml に追加してみてください

android:hyphenationFrequency="none"
于 2017-09-21T07:49:10.543 に答える
7

改行の管理は面倒です。Android は完全な UTF をサポートしているため、最適なオプションは UTF 改行修飾子制御文字を使用することです。

誰かが「ソフト ハイフン」について言及したことは知っていますが、他にもかなりの数のハイフンがあります。

また、辞書の解釈に頼る必要がないように、スペースがない言語の単語間に「ゼロ幅スペース」を使用することもできます。これは、特定の単語を特定のポイントで改行できる言語で、ソフト ハイフンとして使用することもできます。

壊れたくない複合語を使用しているが、Text To Speech システムに適切に認識させたい場合は、「Word Separator」文字を使用する必要があります。「Zero Width Non Breaking Space」は、BOM として使用されているために廃止されたため、使用しないでください。

最後に、スペースは必要だが改行は必要ない場合は、改行なしの単純なスペースを使用します。

于 2012-09-09T18:22:02.670 に答える
6

ソフト ハイフンは、Android 4.3 以降の Samsung Galaxy デバイスで機能しました。

<!-- key combination to enter soft hyphen: [Alt Gr]+[-] or [Alt]+240 on German PC, see https://de.wikipedia.org/wiki/Weiches_Trennzeichen#Darstellung_auf_Computersystemen -->
<string name="no_connection">Nicht ver-bund-en</string>

ここに画像の説明を入力

私のユースケースはかなり狭いので、「verbunden」という単語にソフトハイフンを 1 つだけ使用しました。Unicode \u00ad は効果がありませんでした。

于 2016-02-04T08:16:36.790 に答える
5

次のライブラリはハイフネーションをサポートしています。すべてのタイプのテキスト配置 (左/右/中央/両端揃え) とハイフネーションが自動的に行われます。すべての言語が追加されているわけではありませんが、必要に応じて追加できます。このライブラリは、NO WEBVIEWSおよびSUPPORTS SPANNABLESを使用せず、 LONG TEXTを許可します。

ライブラリ: https://github.com/bluejamesbond/TextJustify-Android

アンドロイド: 2.2 から 5.X

設定

DocumentView documentView = addDocumentView(new StringBuilder("Your long text content"), DocumentView.PLAIN_TEXT);
documentView.getDocumentLayoutParams().setTextAlignment(TextAlignment.JUSTIFIED);
documentView.getDocumentLayoutParams().setHyphenator(new Hyphenator(HyphenPattern.PT));
documentView.getDocumentLayoutParams().setHyphenated(true);
于 2015-01-14T21:03:17.697 に答える
3

質問は古いですが、私にとって最適な解決策が見つかりました:

Xamarin でプログラミングしていると言わざるを得ないため、コードは C# ですが、Java に移植するのに問題はありません。

ソフトハイフン (UTF8 シンボル - 0x00AD) を挿入するために NHyphenator ロジック ( https://github.com/alkozko/NHyphenator ) を使用したため、Textview は適切な場所でハイフネーションを行います。

他の言語のハイフネーションを取得するには、openoffice 辞書を使用しました。たとえば、ドイツ語とスイス語のハイフネーションを取得する必要がありました

http://extensions.openoffice.org/en/search?f[0]=field_project_tags%3A157 1. 拡張機能をダウンロードします 2. winrar などで解凍します 3. hyph_xx_xx/hyph_xx_xx.dic ファイルをコピーします 4. 新規追加しますハイフネータークラスへの言語

NHyphernator リソース ファイルは次のように宣言されます。hyph-xx-xx.pat.txt --> コメントのない dic ファイルのコンテンツ正しい結果が得られない

Xamarin 用のポータブル ライブラリが必要な場合は、アップロードできます。

編集:

breakstrategy は TExtview で Balanced に設定する必要があります。API レベル > 23、それ以外の場合は breakstrategy を使用しないでください。

編集:

mono/xamarin コードは次のとおりです: https://github.com/sma84/NHyphenator-Mono

于 2016-11-11T12:37:12.693 に答える
-2

このエラーがまだ修正されている場合は、 setEllipsizeが役立つ可能性があります。

于 2010-12-15T21:15:18.860 に答える