Beware EditText on API 21
12 OCTOBER 2015 on androidCheck out these two EditTexts
. One is on an API 21 device, the other on an API 22 device.
See the difference? It's even more pronounced with "show layout bounds" enabled:
The height and vertical alignment of the EditTexts
are different! This was caused by a change in the background of EditText
between v21 and v22 (diff).
This change can cause sadness if your EditText
is vertically aligned with other Views
, such as this case in Trello:
The text should be aligned with the icons, yet clearly it's not. The screenshot above is from 5.0; any other version of Android looks perfectly fine.
This problem crops up even if you're using AppCompat. AppCompat usually defers to the system material styles on v21+, which is the source of the problem.
Solution
Both solutions I've come up with use resource qualifiers to handle API 21 in a special manner.
One possibility is to import your own EditText
background assets for API 21. Unless your app is filled with vertically-aligned EditTexts
this seems like more effort than it's worth, since precision-targeting the background of EditTexts
for just a single API version is tricky.
The hackier (but easier) solution is to just define different margins or paddings based on the API level. For example, I found that they're ~6dp off, so you end up with resources like this:
<!-- values/dimens.xml -->
<dimen name="edit_text_spacing">6dp</dimen>
<!-- values-v21/dimens.xml -->
<dimen name="edit_text_spacing">0dp</dimen>
<!-- values-v22/dimens.xml -->
<dimen name="edit_text_spacing">6dp</dimen>
I'd be the first to admit it's ugly, but if there's only a handful of places you're fixing the problem, it's not so bad.
Dan Lew
Read more posts by this author.
Share this post
Using hardware layers to improve Android animation performance
When someone asks me about poor animation performance, one of the first questions I ask is whether or not…
Sharing files on Android in a world with runtime permissions
There are some growing pains we're going to experience while upgrading to runtime permissions. The most painful one I've…
Dan Lew Codes © 2015Proudly published with Ghost