It’s official: new emoji are here, there, and everywhere.
But what exactly is “new” and where is “here”? Great question.
Emoji have long eclipsed their humble beginnings in sms text messages in the 1990’s. Today, they appear in places you'd never expect like self-checkout kiosks, television screens and yes, even refrigerators ?. As emoji increase in popularity and advance in how they are used, the Noto Emoji project has stepped up our emoji game to help everyone get “?” without having to buy a new device (or a new refrigerator).
Over the past couple of years we’ve been introducing a suite of updates to make it easier than ever for apps to embrace emoji. Today, we’re taking it a step further by introducing new emoji characters (in color and in monochrome), metadata like shortcodes, a new font standard called COLRv1, open source animated emotes, and customization features in emoji kitchen. Now it’s easier than ever to operate at the speed of language online.
New Emoji!First and foremost, earlier today the Unicode Consortium published all data files associated with the Unicode 15.0 release, including 31 new emoji characters.?
Among the collection includes a wing(?), a leftwards and rightwards hand, and a shaking face (?). Now you too can make pigs fly (??), high five (????), and shake in your boots all in emoji form (?????).
These new characters bring our emoji total to 3,664 and all of them are all coming to Android soon and will become available across Google products early next year.
Can’t wait until then? You can download the font today and use it today (wherever color vector fonts are supported). Our entire emoji library including the source files and associated metadata like short codes is open source on Github for you to go build with and build on (Note: Keep an eye open for those source files on Github later this week).
And before you ask, yes the variable monochrome version of Noto Emoji that launched earlier this year is fully up to date to the new Unicode Standard. ???
Dancing EmotesWhile emoji are almost unrecognizable today from what they were in the late 1990's, there are some things I miss about the original emoji sets from Japan. Notably, the animation. Behold the original dancer emoji via phone operator KDDI:
Just as language doesn’t stand still, neither do emoji. Say hello to our first set of animations!!!!!
New Color Font SupportEmoji innovation isn't limited to mobile anymore and there is a lot to be explored in web environments. Thanks to a new font format called COLRv1, color fonts — such as Noto Color emoji — can render with the crispness we’ve come to expect from digital imagery. You can also do some sweet things to customize the appearance of color fonts. If you’re viewing this on the latest version of Chrome. Go ahead, give it a whirl.
If you’d like to send goth emoji today in a messaging app, you’ll have to use Emoji Kitchen stickers in Gboard to customize their color. *COLRv1 is available on Google Chrome and in Edge. Expect it in other browsers such as Firefox soon.
Customized EmotesThat’s right, you can change the color of emoji using emoji kitchen. No shade: I love that “pink heart” was anointed the title of “Most anticipated emoji” on social media earlier this summer but what if … changing the color of an emote happened with the simple click of a button and didn’t require the Unicode Consortium, responsible for digitizing the world’s languages, to do a cross-linguistic study of color terms to add three new colored hearts?
Customizing and personalizing emotes is becoming more technically feasible, thanks to Noto Emoji. Look no further than Emoji Kitchen available on Gboard: type a sequence of emoji including a colored heart to change its color.
No lime emoji? No problem.??
Red rose too romantic for the moment? Try a yellow rose??
Feeling goth? ??
Go Cardinals! ❤️?
While technically these are stickers, it’s a lovely example of how emoji are rapidly evolving. Whether you're a developer, designer, or just a citizen of the Internet, Noto Emoji has something for everyone and we love seeing what you make with it.
Source: Google Developers Blog
What’s new for text in Android Q
Posted by Florina Muntenescu, Android Developer Advocate
Displaying text is an important task in most apps, so in Android Q we're continuing to introduce new features to support your needs and improve performance. We disabled hyphenation by default, enabled creating a typeface using multiple fonts or font families, exposed the list of fonts installed on the device, and improved some of the most-used text styling APIs.
Hyphenation is off by default in Android Q and AppCompat v1.1.0
Our performance tests showed that when hyphenation is enabled, up to 70% of the time spent on measuring text is on hyphenation.
Hyphenation takes up to 70% of the time spent measuring text
Given that hyphenation often isn’t needed for all
TextViews in an app, and because of the impact on performance, we decided to turn hyphenation off by default in Android Q and AppCompat v1.1.0. If you want to use hyphenation, you need to manually turn it on in your app by setting the hyphenation frequency to normal. You can set this in multiple ways:
TextAppearance attribute in
<style name="MyTextAppearance" parent="TextAppearance.AppCompat"> <item name="android:hyphenationFrequency">normal</item> </style>
<TextView android:hyphenationFrequency="normal" />
Directly in code:
textView.hyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NORMAL
Find out more about how hyphenation works from this talk at Android Dev Summit 2018.
Use multiple custom fonts in the same TextView
Consider a button which mixes a custom font (Lato in this example) with an icon font:
Button with icon and Latin fonts
Button class accepts only a single instance of a typeface to be set on the text. Pre-Android Q, you can create a
Typeface using a single font family. Android Q enables the creation of a typeface from multiple font families with a new API,
Typeface.CustomFallbackBuilder, that allows adding up to 64 font families per typeface.
Our icon font example can be implemented like this:
button.typeface = Typeface.CustomFallbackBuilder( // add the Latin font FontFamily.Builder( Font.Builder(assets, "lato.ttf").build() ).build() ).addCustomFallback( // add the icon font FontFamily.Builder( Font.Builder(assets, "icon_font.ttf").build() ).build() ).build()
When creating the font family, make sure you don’t put fonts that belong to different families in the same font family object nor the same style fonts into the same font family. For example, putting Lato, Kosugi, and Material into the same font family creates an invalid configuration, as does putting two bold fonts into the same font family.
To define the general font family (serif, sans-serif, or monospace) to be used when text is rendered using system fonts, use the
setSystemFallback() method to set the system fallback font:
Typeface.CustomFallbackBuilder( FontFamily.Builder( ... ).build() ).setSystemFallback("sans-serif") .build()
Text styling API updates
Android Q brings several updates to different text styling APIs:
Improved support for variable fonts
TextAppearance now supports the
<style name="MyTextAppearance" parent="TextAppearance.AppCompat"> <item name="android:fontVariationSettings">...</item> </style>
fontVariationSettings attribute can be set directly on the
TextView in Android Q and in
<TextView ... app:fontVariationSettings="..." />
Improved spans APIs
TextAppearanceSpan now supports
typeface, shadow settings,
LineHeightSpan interfaces now have standard implementations:
Access system fonts
With more than 100 languages supported by Android, and with different fonts supporting different character sets, knowing which system font can render a given character is not trivial. Apps doing their own text rendering such as games, document viewers, or browsers need this information. In Android Q, you can retrieve the supported system font for a string with the
FontMatcher NDK API.
System fonts that can render this text
Let’s consider the above search string. The
FontMatcher API returns us the font object and length. A simplified pseudocode example looks like this:
// font = NotoSansCJK-Regular.ttc // length = 2 auto[font, length] = AFontMatcher_match("たすく a.k.a. のな"); // font = Roboto-Regular.ttf // length = 8 auto[font, length] = AFontMatcher_match(" a.k.a. のな"); // font = NotoSansCJK-Regular.ttc // length = 2 auto[font, length] = AFontMatcher_match("のな");
FontMatcher API never returns
- If no font supports the given string, a font for Tofu (?), the missing glyph symbol, is returned.
- If no exact style is supported, a font with the closest, most similar style is returned.
If you want to get all available system fonts, you can do this with a new font enumeration API. In Java, you can use
SystemFonts.getAvailableFonts, or in the NDK, you can use
ASystemFontIterator. The results of the font enumeration are changed only by a system update, so you should cache them.
New Myanmar font
Android added a new Myanmar font to Android Q that is Unicode-compliant and capable of rendering both Unicode and non-Unicode Burmese (commonly known as Zawgyi), right out of the box. This means starting in Android Q, Android makes it easier for users to switch to Unicode: a user can now use a Unicode font to read Unicode and non-Unicode text for the first time. Android also added new requirements to the Android ecosystem CDD that takes a stronger stance in requiring Unicode, including a new subtag "Qaag" which OEMs should use as a locale designating non-Unicode Burmese. All of these changes should make developers’ life easier in the long term, as reduced ecosystem fragmentation makes it easier to develop for our 50M users in Myanmar.
New emojis in Android Q
Say Hello to your new emoji friends! The latest update includes a number of disability-focused emojis, 59 gender-inclusive designs, multi-racial couples, as well as a few cute animals and household objects. See the latest and greatest in Gboard on your Android Q device of choice.
Text plays an important role in a vast majority of apps, so we’re continuing to invest in improving text API features and performance. Learn more about the new APIs in Android Q along with best practices when working with text in our Google I/O 2019 talk: