Android Get Country Emoji Flag Using Locale

后端 未结 6 2021
难免孤独
难免孤独 2021-01-04 05:31

I have seen that since Lollipop, Android has built in Emoji flags for different countries. Is it possible to use the devices locale to retrieve the

相关标签:
6条回答
  • 2021-01-04 05:43

    Based on this answer, I wrote a Kotlin version below using extension function.

    I also added some checks to handle unknown country code.

    /**
     * This method is to change the country code like "us" into                                                                     
    0 讨论(0)
  • 2021-01-04 05:44

    When I first wrote this answer I somehow overlooked that I've only worked on Android via React Native!

    Anyway, here's my JavaScript solution that works with or without ES6 support.

        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"));

    If you want to pass in the country codes as capital letters instead, just change the two offsets to 0x1f1a5 and 0xdda5.

    0 讨论(0)
  • 2021-01-04 05:47

    I am using this so easily. Get the Unicode from here.

    For Bangladesh flag it is U+1F1E7 U+1F1E9 Now,

    {...
    
     String flag = getEmojiByUnicode(0x1F1E7)+getEmojiByUnicode(0x1F1E9)+ " Bangladesh";
        }
        public String getEmojiByUnicode(int unicode){
            return new String(Character.toChars(unicode));
        }
    

    It will show > (Bangladeshi flag) Bangladesh

    0 讨论(0)
  • 2021-01-04 05:49

    You can get the country code very simple. I want to talk about flag selection according to country code.

    I wrote a class about it and it is very simple to use.

    usage:

    String countryWithFlag = CountryFlags.getCountryFlagByCountryCode("TR") + " " + "Türkiye";
    

    Output :

    0 讨论(0)
  • 2021-01-04 05:52

    I was looking for that too but I don't think it's possible yet.

    Have a look here: http://developer.android.com/reference/java/util/Locale.html

    No mentioning about flags.

    _

    Alternately you can check the answer here:

    Android Countries list with flags and availability of getting iso mobile codes

    that might help you.

    0 讨论(0)
  • 2021-01-04 05:58

    Emoji is a Unicode symbols. Based on the Unicode character table Emoji flags consist of 26 alphabetic Unicode characters (A-Z) intended to be used to encode ISO 3166-1 alpha-2 two-letter country codes (wiki).

    That means it is possible to split two-letter country code and convert each A-Z letter to regional indicator symbol letter:

    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));
    }
    

    Or in Kotlin, for example (assuming UTF-8):

    val Locale.flagEmoji: String
        get() {
          val firstLetter = Character.codePointAt(country, 0) - 0x41 + 0x1F1E6
          val secondLetter = Character.codePointAt(country, 1) - 0x41 + 0x1F1E6
          return String(Character.toChars(firstLetter)) + String(Character.toChars(secondLetter))
        }
    

    Where 0x41 represents uppercase A letter and 0x1F1E6 is REGIONAL INDICATOR SYMBOL LETTER A in the Unicode table.

    Note: This code example is simplified and doesn't have required checks related to country code, that could be not available inside the locale.

    0 讨论(0)
提交回复
热议问题