3

こんにちは私は韓国のAndroidアプリに取り組んでいます。

ここでは、連絡先を表示するためにアルファベットのセクションヘッダーを含むリストビューを実装しました。Stringクラスのsubstringメソッドを使用して、セクションヘッダーとして最初の文字を取得しました。韓国の連絡先の場合も、部分文字列方式を使用して最初の文字を取得します。ここでは、韓国の連絡先の最初の文字に対して、韓国のイニシャルをㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋㅌㅍㅎと表示する必要があります。韓国の連絡先リストの最初の文字がこれらの韓国のイニシャルと一致するかどうかはよくわかりません。

だから私がこれをどのように行うことができるか私を助けてください、または私にフォローするための参照を与えてください...

前もって感謝します..

4

2 に答える 2

5

韓国のアプリでは、最初の文字だけから intellisense を使用するのは正常な動作ではないと思います。通常は完全な Jamo で行われるようです。ただし、それを行うべきではない理由はわかりません。それで、やりましょう。

まず、あなたは二重のイニシャルを見逃しました。これらは、別のキーを押す必要があるため (通常はシフト + 文字)、シングルとは異なります。とにかく、イニシャルのリストは次のとおりです。

ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ

イニシャルが入力されたときに最初に行う必要があるのは、その特定のイニシャルで始まる文字の範囲を取得することです。

Windows Character Map を見ると、最初の文字 Ka (가) が Unicode ポイント0xAC00(または 10 進数44032) にあることがわかります。そのため、任意の範囲を取得するには、この値を計算に追加する必要があります。したがって、FirstLetterまたは何かと呼ばれる定数が必要であり、その値は44032.

까 は at 0xAE4C(または decimal 44620) であるため、乗数 (つまり、特定のイニシャルで始まる文字数) が得られます。44620-44032これはすべてのイニシャルで同じです588

これで、IntelliSense を実装するのに十分な情報が得られました。配列に頭文字がある場合、その配列で入力された文字のインデックスを使用して、それで始まる文字の範囲を見つけることができます。

したがって、ㄱ から始めると、もちろん、가 から 깋 までのすべてが返されます。それらのすべての588。ㄱは「0」を与えるので、

startCodePoint = index * 588 + 44032
// = 0 * 588 + 44032 == 44032 == 가
endCodePoint = (index + 1) * 588 + 44032
// this will include 까

そして、特定の文字が「ㄱ」で始まることを確認することができます

if(charcode >= startCodePoint && charcode < endCodePoint) { ... }

charcode、Intellisense リスト内の項目の 1 つの最初の文字です。

同様の方法を使用して、文字が「가」で始まることを確認する方法を見つけます。すべてが Unicode で整然としているため、これは非常に単純な作業です。


任意の文字の頭文字を取得するには、上記の式を逆に使用できます。

すなわち

  1. 最初の文字の Unicode 値を取得します (例: 각)
  2. この値から 44032 を引きます。
  3. この値を 588 で割ります。
  4. その値をインデックスとして使用して、イニシャルのリストから最初の文字を取得します。

例えば

String initials = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ";
int value = character.codePointAt(0);
value = (value - 44032) / 588;
String initial = initials.substring(value, 1);
于 2012-05-08T09:41:07.813 に答える
0

国際的な方法は、Unicode int コードを取得することです。これは一般に、複数の 16 ビット文字である可能性があります。

int codePoint = strng.codePointAt(0);
int indexToRest = Character.charCount(codePoint); // For your information
于 2012-05-08T09:17:52.627 に答える