Lollipop
以来、Androidにはさまざまな国のEmoji
フラグが組み込まれています。デバイスのロケールを使用してEmoji
その国の旗?
Emoji
フラグをユーザーの場所を含むTextView
に挿入したかったのです。
私もそれを探していましたが、まだ可能ではないと思います。
こちらをご覧ください: http://developer.Android.com/reference/Java/util/Locale.html
フラグについては言及していません。
_
または、ここで答えを確認できます。
フラグとISOモバイルコードの取得の可用性を含むAndroid国リスト
それはあなたを助けるかもしれません。
絵文字はUnicode記号です。 Unicode文字テーブルに基づく絵文字フラグは、ISO 3166-1 alpha-2 2文字の国コード( wiki )のエンコードに使用することを目的とした26個のアルファベットのUnicode文字(A〜Z)で構成されています。
つまり、2文字の国コードを分割し、各A〜Z文字を地域インジケータ記号文字に変換することが可能です。
private String localeToEmoji(Locale locale) {
String countryCode = locale.getCountry();
int firstLetter = Character.codePointAt(countryCode, 0) - 0x41 + 0x1F1E6;
int secondLetter = Character.codePointAt(countryCode, 1) - 0x41 + 0x1F1E6;
return new String(Character.toChars(firstLetter)) + new String(Character.toChars(secondLetter));
}
ここで、0x41
は大文字のA
文字を表し、0x1F1E6
はUnicodeテーブルのREGIONAL INDICATOR SYMBOL LETTER A
です。
注:このコード例は簡略化されており、ロケール内では利用できない可能性のある国コードに関連するチェックは必要ありません。
この回答 に基づいて、拡張機能を使用して以下のKotlinバージョンを作成しました。
また、不明な国コードを処理するためのチェックをいくつか追加しました。
/**
* This method is to change the country code like "us" into ????????
* Stolen from https://stackoverflow.com/a/35849652/75579
* 1. It first checks if the string consists of only 2 characters: ISO 3166-1 alpha-2 two-letter country codes (https://en.wikipedia.org/wiki/Regional_Indicator_Symbol).
* 2. It then checks if both characters are alphabet
* do nothing if it doesn't fulfil the 2 checks
* caveat: if you enter an invalid 2 letter country code, say "XX", it will pass the 2 checks, and it will return unknown result
*/
fun String.toFlagEmoji(): String {
// 1. It first checks if the string consists of only 2 characters: ISO 3166-1 alpha-2 two-letter country codes (https://en.wikipedia.org/wiki/Regional_Indicator_Symbol).
if (this.length != 2) {
return this
}
val countryCodeCaps = this.toUpperCase() // upper case is important because we are calculating offset
val firstLetter = Character.codePointAt(countryCodeCaps, 0) - 0x41 + 0x1F1E6
val secondLetter = Character.codePointAt(countryCodeCaps, 1) - 0x41 + 0x1F1E6
// 2. It then checks if both characters are alphabet
if (!countryCodeCaps[0].isLetter() || !countryCodeCaps[1].isLetter()) {
return this
}
return String(Character.toChars(firstLetter)) + String(Character.toChars(secondLetter))
}
実行可能なコードスニペット
KotlinPlaygroundを使用して実行可能なKotlinスニペットも含めました。スニペットを実行するには、次のことを行う必要があります。
<script src="https://unpkg.com/[email protected]/dist/playground.min.js" data-selector=".code"></script>
<div class="code" style="display:none;">
/**
* This method is to change the country code like "us" into ????????
* Stolen from https://stackoverflow.com/a/35849652/75579
* 1. It first checks if the string consists of only 2 characters: ISO 3166-1 alpha-2 two-letter country codes (https://en.wikipedia.org/wiki/Regional_Indicator_Symbol).
* 2. It then checks if both characters are alphabet
* do nothing if it doesn't fulfil the 2 checks
* caveat: if you enter an invalid 2 letter country code, say "XX", it will pass the 2 checks, and it will return unknown result
*/
fun String.toFlagEmoji(): String {
// 1. It first checks if the string consists of only 2 characters: ISO 3166-1 alpha-2 two-letter country codes (https://en.wikipedia.org/wiki/Regional_Indicator_Symbol).
if (this.length != 2) {
return this
}
val countryCodeCaps = this.toUpperCase() // upper case is important because we are calculating offset
val firstLetter = Character.codePointAt(countryCodeCaps, 0) - 0x41 + 0x1F1E6
val secondLetter = Character.codePointAt(countryCodeCaps, 1) - 0x41 + 0x1F1E6
// 2. It then checks if both characters are alphabet
if (!countryCodeCaps[0].isLetter() || !countryCodeCaps[1].isLetter()) {
return this
}
return String(Character.toChars(firstLetter)) + String(Character.toChars(secondLetter))
}
fun main(args: Array<String>){
println("us".toFlagEmoji())
println("AF".toFlagEmoji())
println("BR".toFlagEmoji())
println("MY".toFlagEmoji())
println("JP".toFlagEmoji())
}
</div>
絵文字の国旗をAndroid TextView(これは非常に簡単です)に挿入する場合は、次の方法を試してください: TextView Androidに絵文字フラグを挿入する方法
私が最初にこの回答を書いたとき、私はどういうわけか私がAndroid via React Native!
とにかく、これがES6サポートの有無にかかわらず動作する私のJavaScriptソリューションです。
function countryCodeToFlagEmoji(country) {
return typeof String.fromCodePoint === "function"
? String.fromCodePoint(...[...country].map(c => c.charCodeAt() + 0x1f185))
: [...country]
.map(c => "\ud83c" + String.fromCharCode(0xdd85 + c.charCodeAt()))
.join("");
}
console.log(countryCodeToFlagEmoji("au"));
console.log(countryCodeToFlagEmoji("aubdusca"));
代わりに国コードを大文字で渡したい場合は、2つのオフセットを0x1f1a5
と0xdda5
に変更するだけです。
私はこれをとても簡単に使っています。 ここ からUnicodeを取得します。
バングラデシュの旗の場合はU+1F1E7 U+1F1E9
さて、
{...
String flag = getEmojiByUnicode(0x1F1E7)+getEmojiByUnicode(0x1F1E9)+ " Bangladesh";
}
public String getEmojiByUnicode(int unicode){
return new String(Character.toChars(unicode));
}
>(バングラデシュの旗)バングラデシュが表示されます