热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[译]AndroidMaterial搜索框实现详细说明

原文地址:ExposingtheSearchbarImplementingaDialer-likeSearchtransition原文作者:AlexStyl译文出自:掘金翻译计划译
  • 原文地址:Exposing the Searchbar Implementing a Dialer-like Search transition
  • 原文作者:Alex Styl
  • 译文出自:掘金翻译计划
  • 译者:Siegen
  • 校对者:XHShirley,jamweak

关于我的应用,我收到了一些用户的反馈,他们反馈最多的是缺少搜索功能。对于像 Memento Calendar 这种囊括了诸如社交时间,纪念日,银行休假日,信息来源错综复杂的应用,我很赞同搜索是这个应用最重要的功能之一。问题是这个功能已经被实现了。Toolbar 里的一个搜索图标引导用户到一个搜索界面。

《[译]Android Material 搜索框实现详细说明》 A user can search by tapping the search icon on the Toolbar

我决定调研一些用户来看看问题究竟是什么。在和这些幸运的用户通过邮件往来交流了一番后,我总结出下面的内容:

人们似乎更加习惯于其他流行应用中的搜索栏,例如 Facebook,Swarm 以及其他的应用。在上述的应用中,搜索栏可以直接通过 Toolbar 访问到,这意味着用户可以从主界面开始搜索。

因为搜索的逻辑已经在应用里实现了,我有充裕的时间来尝试使用 Android 的动画 API 为我的应用增添生气。

试验的进程

这个点子是利用 transition 来衔接已经包含搜索栏的主界面,以及拥有神奇搜索功能的搜索界面。

从一个视图设计的角度,我想要这个 transition 尽可能的相似以便于用户可以聚焦于搜索,感觉不到他们正在看一个新的界面。从一个视图开发的角度,两个界面(Activities)不得不保持分离。每一个 Activity 处理它们自己的事务,从维护的角度来说把它们联合在一起完全是一个噩梦。

因为这是我第一次使用 Transition,我不得不做一些阅读。我觉得 Nick Butcher 和 Nick Weiss 的
有意义运动的谈话视频对我理解新的 API 是怎样工作的很有帮助,并且这个视频里的幻灯片曾经是(现在仍然是)我处理 Transition 相关内容的核心备忘单。

一个类似于我想要实现的特效可以在 Android 手机应用市场里被找到。一旦用户点击了搜索栏,当前的界面就会逐渐消失,搜索栏变大,用户可以开始搜索了。

《[译]Android Material 搜索框实现详细说明》 The transition as seen in the Dialer app

不幸的是这个应用的实现跟我预期的完全不一样。所有的事情都是在一个单独的 activity 里完成的。即使这确实行得通,但我不喜欢把几个功能结合在一起,我希望在未来可以更加灵活的更新应用的设计。虽然这个实现不完全是我想要的,但是关于下一步我该怎么走,我从中获得了一个好主意。

我把期望的 transition 分解成三个简单步骤:

  1. 让 toolbar 的内容渐隐

  2. 把 toolbar 框变大

  3. 让内容逐渐显示回来。

这些步骤可以很容易的通过 TransitionManager 类来实现。通过简单调用 TransitionManager.beginDelayedTransition() ,然后修改这个视图的属性。这个框架会自动的把这些改变应用到视图里。这对搜索栏的扩展和折叠都起作用。渐隐的效果也是用这种方式实现的,但是我们所做的却是正在改变多个视图的可视性。现在唯一欠缺的事是如何在一个操作步骤里实现无缝隙地跳转到搜索 activity。

幸运的是,我记得在一个 Android 开发者视频里见过类似的东西。在名为 DevBytes: Custom Activity Animations 的视频里 Cheet Haase 展示了在 activity 开始或是结束的时候如何覆写系统的动画。最后一点,这点也很重要,我们可以对这个Transition 进一步的修饰让它进行的更快,在 Transition 一开始的时候就显示出键盘。实现这个的简单方式是在应用的 Manifest 文件里声明正确的 windowSoftInputMode。通过这种方式,当第二个 activity 开始的时候键盘就变得可见了。

最终的结果

综上所述,下面的结果被实现了。

《[译]Android Material 搜索框实现详细说明》 The transition as seen in Memento Calendar

你可能想知道这个设计决定是否真的有效。我对这个设计很满意,因为它为我的应用带来了额外的 30% 搜索量。这可能意味这个设计让用户更易于搜索,也可能用户喜欢这个动画效果。😄

还有一些细微的 UX 提升还可以去实现来达到一个更好的效果,例如返回按钮图标的颜色,或者是当用户返回的时候,如果没有在搜索栏里填入搜索内容,就把 activity 结束掉。如果你对学习如何实现此类的效果感兴趣的话, Memento Calendar 是开源的 你可以来看看这个应用里这块内容的实现原理。你可以在 github.com/alexstyl/Memento-Namedays 获得源码或者从 Google Play Store 下载这个应用


推荐阅读
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
author-avatar
手机用户2502910855
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有