web-dev-qa-db-ja.com

Androidのハイフネーション

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

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

私はLaTeXでそれを行うことができるのと同様のハイフネーション位置を提案できるようにしたいと思います:

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

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

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

41
Manfred Moser

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

誰かが「ソフトハイフン」と言ったのを知っていますが、もっとたくさんあります。

スペースが不足している言語では、単語間の「ゼロ幅スペース」を使用できるため、辞書の解釈に依存する必要がありません。これは、特定のポイントで行を超えて特定の単語を分割できる言語のソフトハイフンとしても使用できます。

分割したくない複合語を使用するが、テキスト読み上げシステムに正しく認識させたい場合は、「ワード区切り」文字を使用する必要があります。 「ゼロ幅の改行なしスペース」はBOMとして使用されるため非推奨となっているため、使用しないでください。

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

Android 6マシュマロからの新しいものです。

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

Android:hyphenationFrequency="none"
7
Athul

ソフトハイフン は、Samsung GalaxyデバイスでAndroid 4.3。

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

enter image description here

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

5
OneWorld

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

[〜#〜]ライブラリ[〜#〜]https://github.com/bluejamesbond/TextJustify-Android

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);
5
Mathew Kurian

質問は古いですが、私にとって最善の解決策を見つけました:

私はXamarinでプログラミングしていると言わなければならないので、コードはC#ですが、Javaへの移植に問題はないはずです。

NHyphenatorロジック( https://github.com/alkozko/NHyphenator )を使用してSoftHyphens(UTF8シンボル-0x00AD)を挿入したので、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. Hyphenatorクラスに新しい言語を追加する

NHyphernatorリソースファイルは次のように宣言されます。hyph-xx-xx.pat.txt->コメントなしのdicファイルの内容hyph-xx-xx.hyp.txt->ハイフンのロジックが実行されるWord例外を含むファイル正しい結果が得られない

Xamarinのポータブルライブラリが必要な場合は、アップロードしてください。

編集:

ブレークストラテジーはTExtviewでBalancedに設定する必要があります。 APIレベル> 23、それ以外はブレークストラテジーを使用しないでください。

編集:

これがmono/xamarinコードです: https://github.com/sma84/NHyphenator-Mono

2
user1519979