Duration 34:31
16+
Play
Video

Best practices for text on Android

Clara Bayarri
Software Engineer at Google
+ 2 speakers
  • Video
  • Table of contents
  • Video
2018 Google I/O
May 9, 2018, Mountain View, USA
2018 Google I/O
Video
Best practices for text on Android
Available
In cart
Free
Free
Free
Free
Free
Free
Add to favorites
24.36 K
I like 0
I dislike 0
Available
In cart
Free
Free
Free
Free
Free
Free
  • Description
  • Transcript
  • Discussion

About speakers

Clara Bayarri
Software Engineer at Google
Florina Muntenescu
Android Developer Advocate at Google
Siyamed Sinir
Tech Lead at Google

Clara is a tech lead on the Android Ui Toolkit team, focused on text, fonts and UI widgets. Most recently, you've seen her work if you use fonts in your app or if you interact with the Android text selection toolbar. Clara earned a bachelor's degree in computer science from the Polytechnic University of Catalonia and a bachelor's degree in language translation from the Autonomous University of Barcelona.

View the profile

Florina is working as an Android developer advocate at Google, helping developers build beautiful, clean and testable apps. She has been working with Android for 8 years, previous work covering news at upday, payment solutions at payleven and navigation services at Garmin.

View the profile

Siyamed is a tech lead on the Android UI Toolkit team focused on text and UI widgets. Prior to Google, he developed consumer internet and Android applications in San Francisco, and co-founded a vertical search engine platform. He has a bachelor's degree in computer science.

View the profile

About the talk

This session will cover common usages of text in Android apps, and common pitfalls developers fall into that can be avoided. Topics to be covered include styling with spans, working with editable text, measuring your own text, when and how to use different hyphenation algorithms, and a strong emphasis on performance issues and how to avoid them. Some best practices will be demonstrated in a short live demo.

Share

Welcome to best practices for text on Android. My name is Kyle Lowry and I'm at Exit on the NJ ticket team. And I'm an Android developer Advocate text. So why are we giving a talk about text Well turns out text is a major part of your app. It's part of your design. It's part of your branding is part of who you are and it is a major thing that your users will be consuming. It is fun. The first thing that your users will read and the thing that will mostly affect readability accessibility usability all of that on top of that the end a text

that is responsible for emoji, which we all love all of this obviously comes at a cost. So there's a bunch of performance implications related to text that we want you to be aware of what we're going to go through a bunch of best practices and things that you should know before we can do that. Let's talk a bit about the architecture. We want to explain how the text Zach is fitted with an Android that you can better than understand what we're going to talk about later. The text icon Android is split into two parts. There's Java code and then there's made ever C plus plus code at the very top of

the Java layer. You'll find the thing that you're probably most familiar with with his text View and edit text. These are witches that provide text mention LED out of the box and do everything for you. If you have custom use where you don't want to use our widget that you're probably using the second layer, which is the best classes on Java will help you lay out text and render it without actually using our widget. Once we get into the native part. The rainforest layer is a library recalled mannequin mannequin helps us do word measurement line breaking in hyphenation and it is our

first point of contact with C plus plus but there's a bunch of libraries we used to help us ICU, which deals with Unicode hard fuzz would suspect shaping for us free type which generates bitmaps for all of the cliffs and finally ski out which is our Graphics engine. Today. We're going to focus on the top three of these are the layers that the end. and the one we can provide most best practices in hints into mini can lights at the corner of Android Texas Tech and is implemented in C. Plus plus it's my responsibility measurement and lime breaking. It is important to understand

vs. Java as that defines which features we can back for using support Library, which doesn't allow native code. Let's talk with text messaging me. If you provide the string like this Dominican first two tests identify. The glyphs is a representation of a character and you can think of it as the image to be drawn about the character to get matching is not always want to one here. We have three letters f f i single. Grease can also be found in different forms, which is the case with the Japanese character in the example. This is called your phone for

bike chain degreaser identify this position them together to have the final look at this point position is not always putting the glove side by side, which is the case with the letter e and a cute accent. If you put away the longest ring miniature first divided into Verge and for each word, it does the measurement the result of this measurement is headed into a cash so that if the system comes across with the same word again, if you can raise the computed value and has a fixed size of 5,000 items. Down the street is wider than

the R8s to fit in milk and has to do a line break in the simplest case. This is putting the boxes side-by-side until the boundary is reached and they're moving to the next line the behavioral dyscontrol Twitter break strategy attribute and if we were to switch from simple to balestier minikin will distribute the birds among the lines to have better text alignment the default where is high-quality, which is very similar to balanced except a few subtle differences one of them being hyphenation for the last night. Population increase the alignment of the text and the use of white

space and it gets more and more important as the language gets shoulder. It comes with a cost because there is this because now the system has to measure mortgage any test to compare more configurations for an Optimum solution Android and a half times more expensive than a disabled State on Android improve. The simple brexit is Achilles father with the default configuration still has the same cost. Another thing that The Fakes hyphenation is the local. In this example, if you have a device in the English local and two

examples things one of them is not hyphenated correctly. And the other one did not choose the right leave for the Japanese text this work mostly happen for dynamic load the texts such as this thing's loaded from Network and it happens because the system is not aware of the languages of those things to fix this you have to tell the system about the language using the set text Locale function. If this trend continues multiple languages, you can use workouts plan to make different parts of the world at Spring. However, keep in mind that the number of lookout spots fxd performance of to

text layout one of the most common tasks when working with sex is fixed styling. So we usually would start working with a text to ask previous and said the size text color and font police a single style because all of these attributes affect the entire text from the text but usually for the designer this is not enough and they will want to style specifically one words or one paragraph is to apply a multiple style to the same style to the same sex lock. So in order to achieve objects that can be

attached to text from a star's to an end in Dex and spiders can be categorized into character and paragraph style depending on whether they are only a few characters or entire paragraph. How many characters plants can be split into appearance and Metric effect and the difference between them lies in the method that needs to be called on the text you in order to render the slide of the side so of appearance affecting fence with wire redraw to be called where is Mexico affecting Spence require both of RA measure and an example, let's say that we need to smile a

code block phone number to do this first, we would change the background color for this we would use a background colors. This doesn't change the metric of the text messages on appearance affecting spot, but he also needs to change the phone so far this For this we would use a Pie Face fat butt because phones also change the size of the text. This is a metrics affecting spot. The spinal block suspects by for example changing the layout margin or drawing a bullet in front of the text would use a bullet spent like the

flash from the beginning of the paragraph and affect the entire text of the power by the beginning of the paragraph. You lose the sound completely In the in the framework sweetie find a series of interfaces and Abstract classes and under the hood the framework checks for instances of these classes and then triggers different actions depending on what actually what makes pants. So powerful is a sign that they give you access to things like the text faint or the canvas in the case of some of paragraphs pants. So this means that

you can pretty much handle everything you need in terms of text. So whenever you need us spent like the ones that are available in the framework because they cover most of the common use cases. Okay, what is it go back to our example? We see that's what the typeface plan only gets a typeface starting with Android feet. So this means that if he wants to support free V devices, do we need to create our own custom spot to do this time from metric affecting span and this place gives us access to two methods to update measure state which is called when you own my first call

and all they draw Faith, which is called when the fix your own draw Methodist call and both of these methods Give us directions to the text thing. So then in the text means all we need to do is change the Pie Face. What if we have the tech spring it means that we can also set the background color. So it means that we can just create one codeblocks pan to style or code book. Okay. So now we have two different ways of filing go out code block one was composing multiple spouse one from the framework and a custom one and another one a custom

spot. So which one should you use? So how do they sign there's one important piece of information that you need to remember only Frameworks pens can be parcel. So there's two, cases when the spines are Parcels first when we're passing text Sophia Ethan for copying sex for a number from a text you to an edifice in the same activity or whether we're copying texts from the one application to another that says gets to be parceled a nun parcel the other three boards service. So this is what will happen. If we're passing to text with one framework

spent and one Customs plan just for framers fans are so this means that we're losing our custom tie Facebook, but then if we're passing a text with one Custom Fence that needs me is that no styling will be kept. Find General when you're implementing Spine and Sport excuse for so consider the behavior you want. Should the spout be partially kept or not. So now that you know that spans how do we use them in text with a framework for lights to key interfaces for this? The first one is spammed spend is for immutable text and immutable markup and declares methods such as it gets

pantsed or it gets pen start and get sent and it lets you Clarice pads, but not modify them. If you want to modify them. We have Spina Bowl which has the ability to me to take the mark-up with method to test set span or remove then we have three concrete implementations of these interfaces. The first one is sponsoring which Implement stand and as such has immutable text and immutable markup which influence span of all as such as immutable textbook mutable market and finally, we have a third test which adds mutability to the text which is Venable stringbuilder. This is what we use

internally for example for edits because it allows you to modify the text and the market these last two classes are very different internally battle with string holds an array of spans West Venable stringbuilder holds a tree of stats. Peter Whitely differently implemented. So as a team you were wondering why is the tree more efficient? Maybe there's a case where we want to recommend people only expandable Strangler stringbuilder all the time cuz it's so we ran tests the answer is up to 250 fans. They're the same they basically perform equally so we recommend you do what makes most romantic

sense, which is you spendable string for immutable text Sanibel stringbuilder for beautiful text. However, after 250s, man, they really do start to diverge only recommend you spend a whole string builder for all of your cases just because it is more performance out of curiosity. If you run these tests to the limit on turns out when you have thousands of fans, they really diverge but we really really hope this is not a common uses for anyone. Another common thing with you is fences people trying to check if one stat is present within a span table and the solution we've seen online uses fan.

Gets fat. So it's something like this you just carry for all the span of a given type get an arepa and then just check if you raise empty. This is extremely inefficient, you're going through the entire span looking for all of the instances of that span collecting them all into an array and then just checking if that area is empty. There's a better way to do this, which is next pain sensation this method checks for the boundaries of spans. I'm so when you asked for the first boundary of a certain it will just have to do the work until 10 to first band and then it can stop and it won't

collect any spend into an array wasting memory that you shouldn't do. African tusks when working with filing text a styling International eyes fixed. So we usually in your resources you will Define the same string in multiple languages, but then you need to highlight one specific word. Socio. For example, we won the words text to be both. But the thing is that the word and where it appears is different in every language. So I need to just use HTML text with a problem and this is Beth html text have limited functionality. So if for example you want to change the phone, this is know

something about it's what I teach them the solution for this is to use a notation tax. So the value Paris define whatever we need. So here for example, I'm defying the key and the volume to be the phone's name. And this is how we would use a thin coat so we would get the text from the resources as a spine strength, then we will get the invitations from the span of a toy through them and get the ones that have the key. Very interested in and then the volume and then it would send this

friend based on the Innocents. Leaving now. Look at house. Text is laid out in The View. Let's assume that you have a text me with some padding applied. When you said the RoboCop text me reposition the image to top of the view after depending on top of W2 bottom of the image setting the space in between the image and the area that the text will be drowning and now get compensating top 3-point to Disney location. Can you set text text me with great Elliot object that is responsible for rendering a measuring text the boundaries of the layout or highlighted in Orange

some more information about the text which contains such as the Baseline top and bottom of the Lions. Classes on Android for single Styles and simple text which doesn't contain tap next line or right to left character Dynamic vegetable and selectable text and Florida Keys. Just text me will create a static way up. Then you set the gravity the layout of Jack itself baby position interview get on top of the way to the top of the layout. Include foam padding into top and bottom of the layout and the height of this person is calculated using the values in the

front. The effect is most visible when you use at those clip in this example vanity set the first visit that the text is clipped. Since it only applies when it's at 2 today. It's only applies to space into top and bottom of the text on Android. We will see that lines would overlap on Android TV fix this issue now is the system identifies that the text the lights will overlap. It will put extra space in between the lines and we'll applied Israel to the whole paragraph. To provide an update to provide an option

which is by default turned on. A similar attribute that changes the line height is the elegant text Tye Tribbett height and unlike the other attributes. It will not that's facing sectional start using a different font. There are two different phones. Do you find in the Android phone call back chain Compact and elegant will it make the system choose the elegant version of the same script if that don't exist. Speaking of line height is an important attributes for the readability of the text and you can control it using line spacing extra and multiply it at

3, which will add extra spacing in between the lines but not the last line that designers with mostly as it is but not as multiplying 4 extra on Android. The line height at Target. Two other attributes that the edit on Android p in order to bridge the gap between design and implementation at first base line to top height and Las Vegas and two bottom height. The first one will let you control the distance between the top of the view to the Baseline of the first line and the

second one similarly will let you control the distance between bottom of the view to the Baseline of the last line. Finally when you set text alignment the text will be positioned in the layout getline left and get line. Right functions of the layout object will give you information about this positioning Relic you to delay of boundaries. Now that you know about that and some important functions we can answer every question on the internet, which is how do you plan on around the background spend but we can plan on taking control without sex using delay at

functions. To do that first. We need to Mark out words that we have to draw the background for a notation. That was organization is a good option for such a use case. BB find out drawers for the birds that start and end on different lines and one for the words that start and end on the same line. Beaver Loop, orellana tations to find the words for each annotation using the start and end in the Seas. We want to learn the line number and we can use get line for offset function of the Laird which will convert the character index into a line number.

40 words that start and end on the same night. We also want to learn about the vertical coordinates of the line. We can use get lined up and get line button functions for this. And finally, we want to learn about the horizontal coordinates of the birds and get primary horizontal function with the character index to horizontal coordinate relative to the layout boundaries. Now that you know, the rectangle that you want to throw in we can throw water over the other case World War II start and end on the different line will have almost exactly the same code except now we test identify more

rectangles to drawing Text via goes to the same three phases that any of you on Android goes measure layout and draw measure is by far the most expensive or text you here is where we create the layouts. We just talked about or recreate them. If we need to decide on the width and the height of the view, this is really expensive work. But measure is really really expensive and you need to be very aware of this. It's important to distinguish what causes a non measure with what causes a non draw as for you to mention before

anything that causes a text to change in size or how it needs to be laid out such as the letter spacing the typeface news at text size that will have to trigger an on measure as we need to recalculate that lay out. Where is if you change something that just changes the appearance but not how we place the text on the screen to change the text color. You're going to paint it in that only needs to trigger a non draw which is much much cheaper than doing an Amish or as well. Let's look at these two phases separately. Say we have a text me like this. I sent some text that has several

paragraphs and then I've use fans to style some of the words in it. I change the text size. I change the colors while the first option to measure your text is there's a method in paint called measure text a dead giveaway of this method is not a statical. So what this will do just doesn't understand take the texts. You've given it it doesn't understand line-breaking either. It will place all of the Texas one very long line ignore all of your spans and give you the width of that text. The next option is to use get text balance also from paint again dead giveaway. It takes a string. So it will do

exactly the same no line breaking us. It will place it all together and it will give you the founding box of all of your glyphs, which is a width and height. It's important to notice that these two methods return slightly different values. I'm so text me. Measure text will return you the next Advanced Cliff. This is where you will position the next BF if you were to add another one whereas get text balance will give you the bounding box of the ghost. You have at least two values come from different parts of the van, so they may be very different. Everyone improve on this while we use

layouts have a static method called get desired with what this does is it takes a text to give it a place is each paragraph into one line and taking into account all of a sudden it measures each of the line. And then it Returns the width of the longest line. It has so will give you the width of the longest paragraph. You've given it off. This is useful to know how much your text wants to be before you can restrict it. If you know the width of your view well, then you actually create a Leo object in this case. We traded the static layout by having the constrained with you want to fit in late

can actually calculate how to Reflow the tax and how to make it fits and return so by giving it away it so we can actually calculate the height on top of that as you haven't mentioned before you'll get a lot more information out of your Leah object for each line and will give you things like the Baseline the line start the line end and so on. We've measured the performance of all of these methods next to each other or text is the cheapest compared to measure text. You will see that Leo get desired with and paint get text bands are quite Chief they are similar, but once you get into

creating a statically out or once you expect for you to measure text that gets more and more expensive. Similarly, we've talked before about the word measure cash and how we measure words ones and we place them in a cash welfare pains when you called measure text on the same word a second time turns out it only cost us about 3% of the work to return that value which is a huge game the ones we have a hit in the cash. It's only 3% of the work if we measure this in text you I got on measure takes about 16 to 11% of the work that it did

the first time it sees a word. I'm so definitely using that cash is really important for us. As I said several times now measurement is really expensive. What can we do about it while in P. We've come up with a new feature called pre-measured text behind it is we know that a no on measure we need to take all of the find them in the font play some next to each other and measure all of these words that we will place in the cash. So what pain meds are texts is it takes care of this phase for you and you can run this in any thread so that then once you have that pic calculation sending it on

the text, you only takes about 10% of the work that you had to do initially which is a huge game the way this voting code is we first we need a bunch of attributes to know how to measure the text things like the font you're going to use the text size. We have a convenient method and text you that will retrieve all of these for you. It's get text metrics friends. You can also build his object yourself. If you don't have the text you're going to work with you and then on a background said call Poopy compute a text. Create this triggers all of the things we've been talking about. It measures

each of the words it places. The cash and it's stores all of those values. So this is also useful. If you're going to measure more than five thousand words as this actually stores all of the values. Then once you have all these precomputed information, you can go back to the UI thread and set it on your text. You notice it all of this only makes sense. If you know your text beforehand, if you just know your text as you're going to run to do what we've always done cuz you're going to be blocking that you guys aren't any way. But if you do know your text beforehand, so you're loading it from the

Internet or you have a an infinite scroll. You can run this pre compute all of your texts before it needs to be shown on screen and the game is literally 90% of the work will be done on the background thread which is amazing mention and support Library. We do have a solution for Peewee. Just run this I'm between l&p. We can actually not do exactly the competition that we've done but we can warm up that cash for you. So that's what we do and then before LSAT Levy can't do anything. So it's a no outs but we do have a solution in the support libraries. Another common thing we see related

to all of us is very long text people tend to just a Oh, I thought the text I'll just set it all on the text you when you sent text on text you and Leo stand for in measures all of the words and lays out the entire text. You've given it even if you've given us like an entire book after this can be a huge performance hit if you're sitting very long text that you're not actually showing on screen cuz maybe the user never Scrolls a solution to this is split your text in two separate pieces say for example, paragraphs and put them all into a recyclerview is different items. Then this way while the

user Scrolls, we will start loading the next fits, but we won't actually be triggering a measure in a layout of all of your texts. You can also link this to premature text, but I just talked about and premeasure all of the background of measurement then you will have all of the information really really efficiently So we talked about measure what about draw draw is much cheaper, but you also have several options. If you're going to drive yourself easy one that people tend to favor. Why don't you just canvas. Draw text that's easy right turns out canvas does not understand stands or

line-breaking or any of the things we've been talking about so similar to the things were talking about before it will just draw the text to give it with no styling as one run. I'm instead if you have styling or if you want to use lime breaking against use the layout fastest. You can see the recurring theme all of their passes have a draw method that will actually draw on the campus for you. I think it's time. We actually said the text but in a performance White. Suffix placing is the most commonly used method and it's great for Texas. Let's don't change. So when both a text

and the mark-up attached to it are immutable. Under the hoods that sexy crazy so defensive coffee as a span strength. So this means that if you're changing their original reference, but that still doesn't update. But what if we want to mutate The Spence later or to do this? We would send a text using buffer types pineapple under the hood the face, we will create a copy of it but a pineapple so this means by the text as immutable the spines are mutable. So then wants to know what we can do here is we can get the text as a spendable and then we can add

or remove spice to it. And I know that you'll be tempted to call tax asset text again, but you don't need to do this anymore because text you as a no spend change listener and it automatically knows when something was added or removed and the sex will just be this light. But what if you want to change an internal property of the Spanish, so in case we want to change so that typeface and I'll pass them twice, but in this case, it doesn't know any songs and know that it needs to do something. So we need to tell it and it would do this with either request loud or invalidate

depending on what kind of attributes has changed. So if your change the measure affecting attributes and the text you need to re-measure and then redraw it was called request left, but if you just changed on a fear of stuff, I think I drove you then you just need to validate and call Rita. But what if he also wants me to take the text, so it's a look at the code. We see that's under the hood text. You create a coffee using a spannagel factory. So it has a default Sanibel Factory implementation and then instead of creating a copy of it. We will just

return the same reference to the object in case the object is a span of all and then we just said that's fine of a factory to the Sexes get So this is specifically important if you are using Styles text inside a recyclerview because like this you avoid creating copies inside the recycle of you saving both to be your time and memory allocation. You would use it and of you hold her you would said the spinal fracture. You've just created and then in the unbind your holder, make sure you also think the buffer Tapas finable when you're setting the text. Another common

saying we see related to recyclerview is the use of Otto link you might be familiar with like taking a text you into sending out a link to say web to be able to detect you or else within your text and have them automatically what what happens under the hood. When you do this turns out that one you sent a text on that text you first of all, we will create a copy just like Serena said and then we run a match her for regular expression on your text and for each match where we find a URL we will create a URL stand and add that to your text. If you do this inside online viewholder it you're

creating copies and you're running that regular expression every time you're setting text. Even if you're showing the same texting each item. So you have a little further with a link you're going to be recalculating that for each and every item The solution to this is one don't use Auto Link in your XML. Cuz that automatically triggers all the process instead. First of all, Chris Venable copy of your strength and run either Link at Firelink if I can pass to be able to find all those links beforehand, so you pre calculate all of it then set the text. And if you use for Enos trick of using

buffer types of edible, you will be avoiding all of us and avoiding all of this extra computation. Related to this in general. We want to discourage everyone from using Auto Link math all of the other options in autolink use regular expressions and easy to run however, math actually spends off an instance of a web view to find addresses which is a huge performance hit for your app. So we want to discourage everyone from using nap or all which includes map I might as well but I need this in your taking it away. What do I do coming to the rest of you is smart link if I you might remember last

year we presented smart selection in oh where we use machine learning to detect entities when you were trying to select text this year. We've taken those missing machine learning models that detect entities and apply them to link. If I this way we can do a much better accuracy at detecting all of the entities and we can detect new type. So on top of phone numbers URLs and addresses like everything before we can do more sophisticated things like psychos. The way this works Inc. Does you create a Texans request with your text and it can also take some options then on a background thread you

called text classifier. Generate links. It's very important that you do this on a background thread as this is loading a machine learning model from disk. So please send to the song that you I said, once it comes back. It has all of the detective entities you can apply those links to the text out. There's a change here between the old defy and this building to find used to generate a URL stand that when you clicked it would just go through the link and the case is smartlink. If I that URL stands that are being added Papa floating pool bar with smart actions that you can take. I'm so afraid

sample for an address you might suggest Maps Finally when you have all of your texts ready, you can go back to the you I sent and sent that text on the text. You notice there's a big difference between the old magnify and the new Lincoln fight and that the old one was synchronous and this is a synchronous. This is a huge difference, but it is the way that we can use machine learning to really enhance how we detect entities and accuracy on the new models is really really much better. And since I'm talking about new features, let me introduce our last new feature for PT with his

magnifier. A lot of people tell us that selecting text is really hard and placing the cursor where you want is a really hard task. So magnifier shows a zoomed-in version of where you are touching with your finger to help you place the cursor in the correct position. We've implemented this by default and text you a text and in webview and chrome so you don't have to do any work if you're using the default widgets. However, if you're doing your own custom widgets and you want to do implemented this yourself, there's a very easy API to use their You could do something like this. I just take your

Untouchables and whenever the finger goes down. So the magnifier whenever the finger goes up dismiss with magnifier this creates an effect where the 90s are kind of follows your finger around the screen. The final Jets vs gun for we kind of snaps to the lines on we will publish guidelines on the final USPS come up with but it is very easy to use. I hope the day we prevented a bunch of tips and tricks. We've shown you what text is under the hood on Android and we provided more information on how to style your text so that you can take all of us back to your apps and build

beautiful more performant app.

Cackle comments for the website

Buy this talk

Access to the talk “Best practices for text on Android”
Available
In cart
Free
Free
Free
Free
Free
Free

Access to all the recordings of the event

Get access to all videos “2018 Google I/O”
Available
In cart
Free
Free
Free
Free
Free
Free
Ticket

Interested in topic “Software development”?

You might be interested in videos from this event

September 28, 2018
Moscow
16
159
app store, apps, development, google play, mobile, soft

Similar talks

Dave Burke
Software Engineer at Google
+ 6 speakers
Romain Guy
Senior Staff Software Engineer at Google
+ 6 speakers
Chet Haase
Leads the Android Toolkit team at Google
+ 6 speakers
Dianne Hackborn
Product Manager at Google
+ 6 speakers
Aurash Mahbod
Director of Engineering at Google
+ 6 speakers
Tor Norbye
Tech lead for Android Studio at Google
+ 6 speakers
Stephanie Saad
Software Engineer at Google
+ 6 speakers
Available
In cart
Free
Free
Free
Free
Free
Free
Adam Greenberg
Sr. Global Product Partnerships Lead at Google
+ 1 speaker
Rowan Merewood
Developer Advocate at Google
+ 1 speaker
Available
In cart
Free
Free
Free
Free
Free
Free
Paul Irish
Software Engineer at Google
+ 1 speaker
Jason Miller
Senior Developer Programs Engineer at Google
+ 1 speaker
Available
In cart
Free
Free
Free
Free
Free
Free

Buy this video

Video

Access to the talk “Best practices for text on Android”
Available
In cart
Free
Free
Free
Free
Free
Free

Conference Cast

With ConferenceCast.tv, you get access to our library of the world's best conference talks.

Conference Cast
558 conferences
22059 speakers
8190 hours of content