QuickSearchBox的一点改进

article/2025/10/10 16:37:20

        Google的Android源码包含较多自带应用程序的代码,比如QuickSearchBox,Music,Gallery3D等等,这绝对是一笔宝贵的财富,哈哈。

        最近拜读了QuickSearchBox部分源码,QuickSearchBox可以搜索联系人、音乐、信息、应用程序等等。期间发现一个小小的问题,当我们在搜索应用程序没有找到匹配的结果时,程序没有给出任何提示,这从用户角度来说是不太合理的。于是决定花点时间改进该程序。

        搜索页面如下图所示,选择应用程序,

        在点击搜索后,QuickSearchBox将跳转到搜索内容对用的程序中,比如搜索应用程序时会跳转到ApplicationProvider中,该程序源码在package/providers目录里,包含三个java文件,ApplicationLauncher、ApplicationsAdapter、ApplicationsProvider。

        ApplicationsAdapter利用bindView将搜索的结果显示为自定义的列表布局。ApplicationsProvider则提供了手机中应用程序的信息,包括程序图标、名称等,封装了数据库的操作以提供更方便的操作。ApplicationLauncher主要是页面的展示和逻辑操作。

private void showSearchResults(String query) {
setTitle(query);
mCursor = Applications.search(getContentResolver(), query);
startManagingCursor(mCursor);
ApplicationsAdapter adapter = new ApplicationsAdapter(this, mCursor);
setListAdapter(adapter);
}

        showSearchResults为将搜索的数据映射至列表中。

        再来看看xml布局代码。

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingLeft="4dip"
android:paddingRight="4dip"
android:layout_width="match_parent"
android:layout_height="56dip" >
<ImageView android:id="@+id/icon1"
android:layout_width="48dip"
android:layout_height="48dip"
android:scaleType="centerInside"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true" />
<TextView android:id="@+id/text1"
android:textAppearance="?android:attr/textAppearanceLarge"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="4dip"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/icon1" />
</RelativeLayout>
        搜索结果有数据展示时如下图, 但没有数据展示时则除了title,页面中间只是黑色背景,没有任何提示。

        解决这个问题有几种方案,第一种为直接弹一个Toast,提示显示“未找到应用程序”,自动浮现并消失,这个办法很简单,代码如下,

private void showSearchResults(String query) {
setTitle(query);
mCursor = Applications.search(getContentResolver(), query);
startManagingCursor(mCursor);
ApplicationsAdapter adapter = new ApplicationsAdapter(this, mCursor);
if(adapter.isEmpty()) {
Toast.makeText(this, R.string.application_search_not_found, Toast.LENGTH_LONG).show();
}
setListAdapter(adapter);
}

        第二种方案为跳转到一个新的Activity,提示信息,但是从程序的框架来讲,不太合理,因为ApplicationProvider为后台提供数据的程序,让该部分程序跳转至新Activity不符合框架结构,因此放弃。

        第三种方案,这个是我们容易忽略的方案。ApplicationLauncher继承了ListActivity,我们可以指定自己的布局,布局中必须包含一个id为“@android:id/list”的ListView,为了让布局在ListView无数据时显示提示信息,需要加一个id为“@android:id/empty”的view,此处采用TextView即可,此外要注意设置TextView为gone。具体xml代码修改如下:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingLeft="4dip"
android:paddingRight="4dip"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView android:id="@+id/icon1"
android:layout_width="48dip"
android:layout_height="48dip"
android:scaleType="centerInside"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true" />
<TextView android:id="@+id/text1"
android:textAppearance="?android:attr/textAppearanceLarge"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="4dip"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/icon1" />
<TextView
android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:layout_gravity="center"
android:visibility="gone"
android:text="@string/application_search_not_found" />
</RelativeLayout>
        另外在ApplicationLauncher的onCreate方法中要添加setContentView方法。

        super.onCreate(savedInstanceState);
setContentView(R.layout.application_list_item);
Intent intent = getIntent();
        将修改的工程编译,然后将apk文件adb push到手机上,bingo~

       当然,可能还有更多的方案,折腾无极限,欢迎大家提出,文章不当的地方欢迎指出。

        注:本文参加第二届 Google 暑期大学生博客分享大赛 - 2011 Android 成长篇


http://chatgpt.dhexx.cn/article/TSGyJK2m.shtml

相关文章

项目:QuickHit

项目分析&#xff1a; QuickHit 游戏考验你键盘输入的速度和准确性。 根据输入速度和正确率将玩家分为不同级别&#xff0c;级别越高&#xff0c;一次显示的字符数就越多&#xff0c;玩家 正确输入一次的得分也越高。如果玩家在规定时间内完成规定次数的输入&#xff0c;正确…

高通工具QXDM,QCAT和QPST

1.工具功能 1.1QXDM 关闭打开备份还原NV、NV修改、抓modem log 1.2.QCAT 解析log工具,方便查看 1.3.QPST 手机NV备份(QCN)、资源管理器(EFS Explorer)、dump日志 2.QXDM抓trace方法 2.1安装USB驱动后连接USB到电脑 COM23就是trace接口,另一个是拨号口(串口…

QuickEvent

1 什么是 QuickEvent? ✂️ 仅600行C代码&#x1f523; 支持多语言,采用 UTF-8 编码⚡ 使用QuickEvent设计复杂功能可以让开发者&#xff0c;更加专注与自己模块或功能点的开发&#x1f489; 利用QT的元对象属性&#xff0c;实现控制类的自动实例化&#x1f528; 高内聚&…

Quick Power

6-3 Quick Power &#xff08;10 分&#xff09; The function Power calculates the exponential function N​k​​. But since the exponential function grows rapidly, you are supposed to return (N​k​​)%10007instead. Format of function: int Power(int N, int…

QuickHit项目

玩家类&#xff1a; package QuickHit;import java.util.Scanner;/*** * author 呵呵* 玩家类**/ public class Player {//当前级别号private int levelNo;//当前级别积分private int currScore;//当前级别开始时间private long startTime0; //当前级别以用时间private int ela…

quickAction

有一段时间没有上来折腾这个专题了&#xff0c;一来项目的确紧张&#xff0c;二来自己一惯是很懒的。今天想与大家分享的是一个QuickAction的东西&#xff0c;模样其实就是通讯录中点击头像后弹出的那个提供可操作按钮的窗口。 这个效果其实我们也用过&#xff0c;就是QuickCon…

快速检查(QuickCheck)(译)

source: http://www.jianshu.com/p/bb93972bac53 快速检查&#xff08;QuickCheck&#xff09;&#xff08;译&#xff09; 作者 低智商游戏 2016.02.01 00:26* 字数 4778 阅读 239 评论 0 喜欢 0 本文译自 objc.io出品的书籍《Functional Programming in swift》第六章&#…

quickbi使用

在maxcomputer中建表时应该注意四种建表方式不能使用临时查询的方式建立表结构&#xff0c;这种无法提交到生产环境&#xff0c;虽然在数据地图中可以查询到&#xff0c;但没提交生产环境中 暂时不知道这种情况&#xff1a;通过数据地图可以看到测试表通过临时查询简报方式也在…

阴阳师模型提取

0.声明 本文中的开发工具、第三方资源均用于学习用途&#xff0c;而非商业用途。本文中所有资源截止发稿时已全部删除 1.前言 最近一直在玩阴阳师。玩的时候我们不难观察到&#xff0c;现代游戏的制作中&#xff0c;画面、游戏体验都大大改善&#xff0c;除此之外&#xff0…

QUICKBMS 中文指南

我正打算做一个使用Quickbmsqu去解那些没有解包器的文档的教程。6 ?- s/ g/ B8 }, a$ ` 起步会很简单,然后越来越难,直到你学会并且编写你自己的脚本。 我们需要如下的四个工具: 1、16进制编辑器,比如HxD。(我用WINHEX) 2、Quick BMS http://aluigi.org/papers/quickbm…

quick bms的使用

下载工具quick bms&#xff0c;官网&#xff1a;http://aluigi.altervista.org/quickbms.htm 新建脚本 Script File -> New 选择你要操作的文件 Archive File -> Open Archive 选择输出目录 Folders -> Select Out Folder 编写脚本&#xff0c;点Quick Save保存脚…

乘方及方根运算电路

乘方及方根运算电路 图5.4-36是乘方运算电路。由于相乘器相移的影响&#xff0c;高次方运算会带来很大误差&#xff0c;通常串接的相乘器数量不超过2~3个。 图5.4-37是开方运算电路。要使此开方电路能稳定地工作&#xff0c;输入电压U1必须为负值。如果U1为正&#xff0c;将形…

比例运算电路(multisim实现)

目录 1.同相比例运算电路 ​ 输入与输出关系&#xff1a;​ 2.反相比例运算电路 输入与输出关系&#xff1a;​ 1.同相比例运算电路 仿真波形&#xff1a; 输入与输出关系&#xff1a; 2.反相比例运算电路 R2扫描波形 输入与输出关系&#xff1a;

模电总结二:基本运算电路

一、比例运算放大电路 二、加法运算放大电路 三、减法运算电路 四、积分运算电路 五、微分运算电路

大学模电实验合集丨实验六 比例求和运算电路

目录 一、实验目的 二、实验仪器 三、实验要求 五、根据实验报告回答下列问题 一、实验目的 1.掌握用集成运算放大电路组成比例、求和电路的特点及性能。 2.学会上述电路的测试和分析方法。 二、实验仪器 1.示波器 2.信号发生器 3.数字万用表 三、实验要求 在 MultiS…

【模拟电子技术Analog Electronics Technology 24】—— 信号的运算与处理(1):基本的运算电路分析

写在前面&#xff1a;在本篇博文中&#xff0c;我将分析几种常见的基本运算电路&#xff1a;比例运算电路&#xff0c;加减运算电路&#xff0c;微分和积分运算电路&#xff0c;指数和对数运算电路输入与输出的关系。但是&#xff0c;掌握单一的运算电路并不是我们的最终目的&a…

计算机系统基础(三)——运算电路基础

运算电路基础 数字逻辑电路基础运算电路基础数字逻辑电路基础 从C语言表达式到逻辑电路C语言支持的基本数据类型从C表达式到运算类指令从运算类指令到运算电路 C语言中各类运算算术运算按位运算逻辑运算移位运算截断和扩展运算 整数加减运算补码加减运算器无符号整数加法溢出判…

运算放大电路(比例运算电路)

0.反向比例运算电路 这是典型的并联反馈负反馈电路&#xff0c;输入电压U1通过电阻R作用于反向输入端&#xff0c;故输出电压与输入电压反向&#xff0c;同相输入端通过补偿电阻R接地&#xff0c;其值为U10时反相输入端的等效电阻&#xff0c;即各支路电阻的并联&#xff0c;因…

正弦运算电路

在很久之前&#xff0c;我在寻找一个能够进行正弦信号的电路。这个电路的意思不是说DDS正弦信号发生器。而是说&#xff0c;当输入一个信号x时&#xff0c;输出信号ysin⁡(x)&#xff0c;也就是说&#xff0c;输入信号xπ/2 V时&#xff0c;输出y1V&#xff0c;输入信号xπV时&…

模电笔记 基本运算电路

理想运放 “虚断” 理想运放的输入电阻为无穷大&#xff0c;流入两个输入端的电流近似为0 “虚短” 条件&#xff1a;理想运放工作于线性区&#xff08;存在负反馈&#xff09; 虚短&#xff1a;两个输入端的电位近似相等&#xff0c;净输入电压近似为0 比例运算电路 反…