Android Design
developer.android.com
developer.android.com
"For the Back key, you should make navigation more predictably [sic] by inserting into the task's back stack the complete upward navigation path to the app's topmost screen."
No. This piece of advice is the sole reason why the back button is confusing to users. Injecting activities artificially onto a user's Back Stack based on some arbitrary and imaginary path that they might have taken to get there is horrible. If I'm in the middle of reading a book and get an email notification, and I touch that notification to quickly read the email, that Back button better damn well take me BACK to what I was doing. Don't take me UP to the list of emails in my inbox. This is where the average user will become lost and not understand why they aren't taken back to reading their book, and will just end up touching Home out of frustration.
Bad Google!
[1] http://developer.android.com/design/patterns/navigation.html
Whatever way you look at it, that's pathological behaviour.
I don't see how inserting items between the text message and Angry Birds is a good idea.
What apps should have, is a way to always get to the apps main screen in the app. But changing the back button behavior seems confusing.
In the message app context "back" takes you to a list of messages, which makes a lot of sense.
Here's an example -- from the homescreen, click a Music widget. The Music app opens and shows the song I was listening to. I want to go back to the playlist I was playing from so I hit back. Instead, I'm dumped back to my home screen. you have to hit the Google Music icon in the top-left to go back within the Music app. I don't mind having to hit back a couple of times because I've learned that you can just keep hitting back and you'll eventually get where you were.
My assumption was that it would take me up the stack, since when I entered the Mail program and navigated down, Back took me back up. But when I entered from some other place (like the settings app) then back wouldn't take me up to inboxes.
I'm sure it would have made more sense if I realized it was a system-wide Back and not an app-only Back.
Personally though, I would prefer the back button system-wide only. You can easily provide a UI element to take you to the top of the stack (especially since when an app is forced into a state, you only want to get to the top of the stack). Sometimes I even get confused when the back button takes me back a webpage in the browser.
I've thought about it some, and I think the problem is that the back button lacks the concept of context.
In the music app example, when I first use it I get the front screen, then choose a song.
Then I press the home button, put my phone away and at some point the song stops.
Now, some hours later I open up the music player from the home screen and it is still showing the song, what behaviour should the back button have?
I think it should take me back to the song list (because I am now in the "Music" context in my head - and this is what it now does). But one could argue that the back button should take me back to the home screen.
On android we have only one system-wide consistent timeline to work with, and that's the timeline of fired intents. It works across the whole system. Back works on that level by default and is defined by default as "go back in time".
That's exactly the problem. The user should intuitively understand an action. Since they don't, that means it's Google's fault for implementing it poorly.
This inconsistency and change in Google apps' behaviors is frustrating and is the only thing that I think they failed at in their attempts to fix the "consistency" problems of Android UI/UX.
I'm with the grandparent, I'd like to see this clarified. Some picture-based examples might help explain this issue better to those unfamiliar with Activity management.
For me, the best solution would be make the back button come back to the previous screen, ignoring where they are. So, if you are playing Angry Birds, tap an email notification and then press back, you return to Angry Birds. But, also, in screens in which the user may want to go to the parent element, developers should put a button to go "home". In the email screen, a button to go back to inbox, in the Music app a button to go to the Music app initial screen...
There are useful settings that help me accomplish the task, and then there are not so useful settings where developer simply couldn't decide. I particulary dislike configuration UIs that devote whole section of toggles and switches for configuring the configuration screen itself.
While I understand that users can be easily overwhelmed with a plethora of options, this one makes sense.. especially for an email app.
Rethink your UX, put together prototypes, user-test, and repeat. Leave configuration option as last resort. That's the approach for app that wants to "Simplify my life" and "Make me amazing".
If the back button did it's job properly then the feature would just work; you wouldn't need to manually configure it to match your mental model.
Config settings like that are a way for lazy designers to avoid making hard decisions.
Joel Spolsky wrote about this over 10 years ago:
Every time you provide an option, you're asking the user to make a decision. That means they will have to think about something and decide about it. It's not necessarily a bad thing, but, in general, you should always try to minimize the number of decisions that people have to make.
and
"But wait!" you say. "It's important to have options for advanced users who want to tweak their environments!" In reality, it's not as important as you think. This reminds me of when I tried to switch to a Dvorak keyboard. The trouble was, I don't use one computer. I use all kinds of computers. I use other people's computers. I use three computers fairly regularly at home and three at work. I use computers in the test lab at work. The trouble with customizing your environment is that it just doesn't propagate, so it's not even worth the trouble.
http://www.joelonsoftware.com/uibook/chapters/fog0000000059....
like the 'designers' of gnome3 (using the term loosely here) who thinks focus-follow-mouse and click-does-not-raise-window are things that only the devil would use and so no one should be allowed 'for usability sake' and 'think of the children'
think about it. a black wallpaper is the best readability option. period. so let's remove the user ability to change wallpapers pronto!
what i say "everytime you provide the user an option, you are asking him to, if he uses the software enough, to take a little second to make a decision that will give him an incredible productivity edge"
now, stop being lazy and hiding behind excuses. work on the real problem: how to present the options so they are not in the way, like joel mentions it while not being missed by the user
This doesn't mean eliminate all choice. There are enough choices that users will have to make anyway: the way their document will look, the way their web site will behave, or anything else that is integral to the work that the user is doing. In these areas, go crazy: it's great to give people choices: by all means, the more the merrier. And there's another category of choice that people like: the ability to change the visual look of things, without really changing the behavior. Everybody loves WinAmp skins; everybody sets their desktop background to a picture. Since the choice affects the visual look without affecting the way anything functions, and since users are completely free to ignore the choice and get their work done anyway, this is a good use of options.
(Note this part: everybody sets their desktop background to a picture)
So you can only go crazy on futile options and not useful ones? Give me a break.
The way you suggest is why Android's back is confusing. If I hand you my phone and put you on a particular screen and ask you "if you press back right now where will you end up" you have no idea
Even if it's your own phone if it's been a few minutes, hours since you last used an app you'll have no idea.
Here’s what I hope is an objective fact about the Android back button. IT’S NOT PREDICTABLE!
The way it works is that each app has a “stack” of screens. Pressing the back button pops the current screen off that stack revealing the screen below. If there are none you are taken to the home screen. The problem is let’s say you start the Messaging app. The first screen is “list” of conversations screen. You pick a conversation and now you are on the “conversation” screen. From the conversation screen you press “back” and you get the “list” screen. Press back again you get the “home” screen.
Now let’s take another senario. You are in the browser. You get a notification that you have a new message. You select the notification for the message. You are taken to the “conversation” screen. You press home and do something else, say listen to music. Later you decide you want to send a message to someone. You go the home screen and pick the messaging app. Since the app is still running you see the “conversation” screen. You press back you get the “home” screen. WTF!
In the first case it went “conversation”->”list” in the second case it went “conversation”->”home”
Notice in this case, even if you had an amazing memory and could remember that you happened to launch the messaging app from a notification an hour ago or last night or something you still have no direct way to get to the “list” screen. The only way there is to select the messaging app either from the home screen or the recently used list. You’ll get the “conversation” screen. You press “back” and you’ll exit the messaging app back to the “home” screen. Now you have to navigate the home screen to the screen that has the messaging app icon on it so you can re-launch the messaging app and have it start in on the “list” screen.
Android should never have had a back button in the first place. If there was no back button there'd be no way to make it inconsistent. Switching back to another app would be come the simple habit of holding home for a moment and picking the app you want to go back to and you'd always be able to predict where any button will take you.
I applaud them for trying to fix it but putting in the guidelines, which may or may not be read by the majority of devs, seems unlikely to fix the problem.
And while you're at it, pretty consider getting rid of all the buttons altogether, and just use screen gestures, kind of like in N9's Meego. I keep getting this feeling that being there all the time, they are just wasting precious space.
It has unfortunately little to do with UX, since both end up being confusing on edge cases (Astro's horribly enraging "press back twice to 'exit'", the conversation or gmail app issues people mentioned in this thread).
I personally tend to prefer back as in back in time but I know for sure opinions vary.
This is what I was told at the Android developer labs in Paris last November, in a Session about Ice Cream Sandwich Design:
http://developer.android.com/guide/topics/ui/actionbar.html#...
Both back button behaviors are perfectly valid and convincing arguments can be made for each, so the choice is pretty much arbitrary. But if Google doesn't enforce any particular behavior and leaves it up to the developers, the only possible result is confusion.
Additionally one could make the argument that the whole back button concept itself is inherently confusing, precisely because the right choice of behavior isn't obvious.
The three omnipresent buttons are now back, home, and recent apps. Recent apps pulls up a visual stack of everything you've used recently, so the ICS expectation would be that users would hit that key if they want to navigate among apps.
Has ICS rolled out to any older phones yet?
Otherwise, my workflow basically goes: press home button, use the task manager to kill everything, then visit an app and navigate top-down to where I want to go. Rinse and repeat for the next app. Like others have been saying, the back button is inherently either arbitrary or confusing, and I don't know how to fix it.
It should be replaced as a permanent UI feature with a task switcher button. I don't know how a modern operating system can get by without some sort of taskbar equivalent. I need to know what apps are open, and be able to navigate to them and close them as needed. Why has this not been implemented? I'd suggest putting this into the slide down top bar if there weren't full screen apps that totally break this function. Therefore, I suggest replacing the back button with a task switcher. I won't be holding my breath.
How do I make these "beautiful designs" work across all Android phones? How do I use an Actionbar on a non 3.0+ device without external libraries? How can I supply a consistent look and behavior for my application when some android OEM keyboards don't even offer the same modules as other ones?
How am I supposed to follow these guidelines when every Google application has a different implementation of the Actionbar itself?
The things that really bother me are:
1. If I implement one of the new themes they're discussing on the linked page, it only works in 3.9% of Android phones on the market, so if I want my apps to look like Google's on older phones I'm left to implement my own version of the themes. This is the same thing that happened when they announced "Homepages with square buttons for activities are the new way you should do everything!" and didn't release source code for how to do it for years afterwards with the Google I/O app, so every app that tried it did it a different way.
2. How am I supposed to use the action bar if Google's own applications can't decide on how to use it? Look at the "What's up with the bar" section of this blogpost: http://minming.posterous.com/google-currents-yet-another-con...
http://android-developers.blogspot.com/2011/08/horizontal-vi...
http://developer.android.com/design/static/content/ui_overvi...
It listed a bunch of features and user interface methods that apps should have, but I couldn't find any resource for actually implementing what they suggested, apart from the link to the android developer page at the end.
I love that they included the ICS home screen's "glass desktop" effect in the "Delight me in surprising ways" section (http://developer.android.com/design/static/content/principle...). It's a completely unimportant feature, but the first time I swiped past the edge of my rightmost homescreen and saw the effect, I appreciated the attention to detail.
Where I disagree is with their "Pictures are faster than words" suggestion. I completely agree that many things are best said with images, but I've had a hard time identifying the function of several features in the icon-driven UI's featured in both ICS and in new Google web redesign. In ICS's Gmail app, I'd understand the words "Mark Unread" much quicker than the "sealed envelope" icon which I had to experimentally discover.
It's also interesting to note that in ICS Gmail, Mark Unread is an icon and Report Spam is text, where in web Gmail, Mark Unread is text and Report Spam is a stop sign.
Everything looks so awesome and shiny - but where is the actual implementation? Is this stuff just a ICS theme (I haven't used it myself as our app is in 2.2 land)?
Others pointed out to check the "Developer" link - but that is just the standard Android docs I've been digging through for months already. Searching for things like "Index Scrolling" (which would be awesome to add to an app) or "Switches" doesn't return anything useful - so what are the Building Blocks and how do I get them into my app?
This page should either a) include demos (or links to the demos if they exist already) or b) be embedded in the code docs (android.widget.GridView should show the screenshot and UI guidelines).
It would be amazingly helpful if they would link from the 'Android Design' page to the docs exactly what they are talking about.
I'm not sure as an Android developer I'm ready to leave those users behind just yet which means a lot of extra work maintaining 2 different sets of UI code. The action bar is the killer.
Kudos
Note: Microsoft (for once) actually one-up Big G. here. They provide the PSD and fonts for Windows Phone 7 on MSDN + the UX Guidelines.
Also, for Apple, 3rd party made all the PSD and templates for them...
1:The bottom bar fits 5 items. An action bar needs to have the app name as well, which means it can't have 5 items anymore. Having a "More" option is just dumb.
2:The iOS bottom bar has text underneath its icons and the action bar doesn't. I'm afraid the icons I have aren't obvious enough without text.
3:This is a conversion from iOS so the images are already made
4:Getting an Android action bar to work on older versions is very difficult. The Android compatibility library doesn't help here, and the third party libraries I looked at were not mature enough. I'm doing this work as part of a fixed price contract so I can't waste days getting it to work reliably.
Bottom line: Android apps would look a lot better if doing things the right way was also the easiest way.
http://developer.android.com/design/patterns/multi-pane-layo...
Good advice for rich web apps too.
Does a button marked "on" indicate it is already on, or that pushing the button will make it "on"? I'd like to see that standardised.
http://developer.android.com/design/building-blocks/pickers....
Before you drag: http://i.imgur.com/4MUXO.png
After you press to drag: http://i.imgur.com/BqXMY.png
To be fair, it's a huge improvement over: http://i.imgur.com/2exF7.png
I'm not a fan of the swiping, but you're right. It is a huge improvement.
I actually had testers come up to me and report bugs about the Android TimePickerDialog as bugs in our application saying that it didn't work as expected and it was against the UI specifications (which of course only have pictures for the iPhone version of the application).
I had to actually replace them with two dropdown sliders and a button so that the testers would be happy.
Does anyone know whether you can manipulate the controls by dragging, or do you really have to use those little up and down buttons?
[1] http://blog.blackwhale.at/wp-content/uploads/2011/05/UIDateP...
See my other comment here: http://news.ycombinator.com/item?id=3458159
Any ideas how they made this schematic?
the phone on the left is a nexus s, which has the (now) older style of dedicated hardware buttons. the nexus prime on the right is apparently what newer devices are supposed to have, which are software buttons that are actually just part of the main lcd and the operating system reserves a section of the screen to draw them in software.
the big benefits of the newer style are that they can be hidden while playing movies or in other situations where they are not needed, they can be rotated when the device is rotated, and, maybe most importantly, the operating system now gets to control which buttons are there and in what order they're in. an annoying thing about the hundreds of different android phones prior to this was that every manufacturer seemed to put the 3 or 4 hardware buttons in a random order that made them inconsistent.
However, from a developer's point of view this is almost unusable. By not providing the according XML/Java code, we are forced to reimplement everything from scratch, making smaller and larger errors, introducing inconsistency and making the look and feel not quite the same between apps.
Then again, it fits well with the current way Google is doing UX design (http://minming.posterous.com/google-currents-yet-another-con...).
[1]: https://twitter.com/#!/AndroidDev/status/157570583800971264
[2]: http://developer.android.com/guide/practices/ui_guidelines/i...
And then there are the closed-source Google apps which at least slightly resemble the UX guidelines given on that site.
And then there are the more complicated UI elements which provoked the creation of fork projects to allow for the reusability and compatibility not provided by the Google devs, like http://actionbarsherlock.com/ and http://viewpagerindicator.com/
Accessibility is notably absent from the design doc.
.../index.html
It's the little things that matter. This is shameful for a company so big.Bury those. If you're doing a plain HTML site, use MultiViews to hide the extensions. They're not important to the content.
When I see `index.html` in a URL, it's never a good sign. It's done by a sloppy "web designer" that knows how to use DreamWeaver and FTP things to the server. They make a tremendous mess for the next team that has to come along and somehow upgrade the site without breaking everything.
It's not 1998 any more. You can afford to script your pages, have clean URLs, and still get great performance.
Another thing I hated about the website is how sparse it is in technical details. If Google really hopes us to make use to these pattern why not release some of these as widgets or templates.
They've "touched nearly every pixel" and "App icons are works of art in their own right" but the contact name on their contacts icon is "Lorem Ipsum". Not exactly a warm, human feel.
http://developer.android.com/design/static/content/design_el...