AndroidDesign经过近两年的发展,确实是在不断的日趋完善,但是不可否认的是,这套规范远未至臻完美。 研究AndroidDesign这么久,我一直都在讲述AndroidDesign的优势与便利,却有意无意的忽视着AndroidDesign中的各种不足之处。这次,藉由知乎上的一个问题,我打算整理一下目前为止我觉得比较严重的,AndroidDesign的几个缺陷。希望大家在看到这篇文章之后,能够下意识的避免这些问题,或者从这些问题入手,发现改进AndroidDesign的方法。 1。可见性 图片来自评论尸。 也许你也遇到过这样的状况吧:看到一个新应用,把玩了许久但是却完全没有意识到Drawer的存在。这就是目前AndroidDesign很大的一个缺点:可见性不足。就拿Drawer做例子,虽然Google强调过开发者应该通过各种方式来让用户发现Drawer的存在,但是这个控件本身的可见性很差(所以才会需要开发者花额外的功夫让用户意识到它的存在),这点是不可否认的。如果和iOS的对比,那就更加明显了:iOS中的Drawer一般会通过一个专门的按钮唤出: 这样就基本不存在可见性的问题了。毕竟比起AndroidDesign标准的Drawer按钮(应用图标和hamburger),这个按钮的存在感要高太多。要避免这个问题,有个很方便的办法就是采用非官方Drawer,使整个界面都可以被拖动,能大大增加Drawer的可见性。,在初次进入应用时展开Drawer也是很好的提示方案。有的应用甚至直接将Drawer作为真正的主界面(在主界面按下back会开启Drawer,在Drawer按back才是退出应用,不过并不推荐这种方式),很好的解决了这个问题。另外,除了Drawer之外,还有一个已经快要死掉的控件ScrollableTabs也是可见性非常差劲的类型(只能看到当前和左右各一个Tab的名称)。看不到所有Tabs的坏处很明显,我这里有个不那么恰当的例子:我父亲的一个朋友用了两年的Kin居然不知道左右滑动可以调出更多其他的功能好在这个控件已经基本没什么应用在用了。 2。按钮样式 乱七八糟的按钮样式容易让用户感到迷惑,有时甚至会让用户不能确定这到底是不是个按钮?而且有的开发者又会自己创造新的按钮样式,更是让人迷惑。其实现在还在用的按钮样式基本上也就只剩下两种了borderless(无边框)和plain(平面式)。活用这两种按钮样式,在正确的地方使用正确的按钮,可以让用户的困惑减少很多。 3。使用图标按钮 这点要对比iOS来看。AndroidDesign中明确说过尽量使用简洁清晰的图标来制作图标按钮,但是图标这种东西往往具有一定的不确定性,比如下图这些图标: 一个图标根据使用情况不同可以代表不同的信息,很经常发生的情况是同一个图标在不同的应用里起到了不同的作用。 来看看iOS。iOS选择直接大量使用文字按钮(或者图片在上文字在下的按钮)。相比之下,Android的纯粹图标按钮就显得很不直观,更别提某些开发者自己画了一套让使用者完全不明所以的图标,那简直是对用户体验的毁灭。 还有更糟糕的。如果开发者使用了自制的ActionBar,那么唯一的救命稻草长按图标浮现提示(本来这个提示就已经够隐蔽的了,说实话有多少Android用户知道长按图标可以出现文字提示的?)也就消失了。举个例子,在Android4。1以上的自带时钟应用中,添加不同时区时钟和进入闹钟界面这两个按钮是没有任何文字提示的,尤其是那个添加不同时区时钟的按钮,第一次使用的用户基本不可能直接猜出那是什么用的按钮,长按又无法获得提示,实在是憋屈。 上面是很久以前我还在给四次元画Demo图的时候想到的一种解决方案。在Android上,开发者是可以通过比较简单的编译就实现在按钮旁显示文字的效果的。比起让用户猜测图标按钮的含义,在空间充裕时,于一些关键按钮非通用性按钮旁显示文字,这便能很好的解决这个问题了。除了强制显示文字,还有很重要的一点就是尽量使用标准图标和标准含义,不要随便创造含义不能一目了然的图标,或对已有图标添加新的含义。自制图标的时候,注意一些通用的规范,比如在图标的右下角加上表示新建(新建前缀),等。当然,这个问题还有很多更好的解决方案,欢迎讨论。 4。ContextualAction的问题 AndroidDesign里对于Contextual的定义倒是很明确,长按时出现的操作。但是对Contextual操作的触发方式却没有靠谱的规范。Google自家就有好几种对ContextualAction的解决方案: 上图左至右分别是单项目的ActionOverflow,上下文ActionBar和次级操作按钮。按照Google的说法,采用这三种方式调出动作菜单都是合理的。ItemActionOverflow(单项目动作菜单)和SecondaryAction(次级动作)可以避免长按造成的可见性不足,ContextualActionBar可以在固定的位置提供固定的操作。它们各有好处,也各自有适合的地方。但问题是,有的时候他们又会同时出现(比如PlayStore里Allapps列表),这便让人感到无法理喻了。另外,我向来认为,无论什么操作都应该能通过数次单击来完成,而官方规范里的ContextualActionBar的唤出方式却只有长按(在Gmail里也可以单击头像唤出,这是个不错的进步),可见性非常低。就这一点而言,我比较喜欢ItemActionOverflow和SecondaryAction。 5。ActionOverflow 下图可以说明所有问题: PlayMusic的专辑页面中,你可以看到三种不同的AcrtionOverflow。我觉得,应该没有任何一个新用户能在第一次使用PlayMusic的时候就搞清楚屏幕上三个ActionOverflow的区别吧。更何况它们又长得几乎一模一样,实在是令人无语。 由于Android将所有的菜单溢出项都放在了ActionOverflow中,造成了很多地方都会出现ActionOverflow。这个问题,我现在也暂时没能想到什么很好的解决方案(其实遇到这问题一共也就这么几个地方,而且有趣的是,这还都是Google自家应用),希望大家能共同讨论一下。 说了这么多的问题,我想表达的中心思想不过是,AndroidDesign经过近两年的发展,确实是在不断的日趋完善,但是不可否认的是,这套规范远未至臻完美。希望开发者和设计师们在设计自己的应用的时候,不要盲目的遵循规范,或着奉Google自己的应用为圭皋,请在设计应用的时候,更多的加入自己的思考。 另外,如果你发现了AndroidDesign的其他问题,请尽管向Google方面反馈。当然,也欢迎在评论中探讨。