搜索栏 SearchDialog 的使用 不显示的问题

在配置文件,代码里反复查看的情况下,还是未能找到SearchDialog不显示的原因!

在度娘找了很久,终于在某人的评论中找到答案,试了下了果然起效,修改内容如下:

<?xml version="1.0" encoding="utf-8"?>
<searchable
xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/searchHint"   <!--需要用@string 方法,且必须要有label属性-->
android:hint="@string/searchHint"
android:searchMode="showSearchLabelAsBadge" >
</searchable>

不错,正是android:label属性的赋值问题,需要用@String方式注入赋值,而不能直接赋值!

对于SearchDialog的使用,会比较繁琐些,但是它是一种浮动的方式出现,可以覆盖当前Activity界面,

相对于直接使用SearchView效果要好一些。

当然SearchView 如果跟Fragment结合,也是不错的选择!

下面介绍下SearchDialog的使用方法:

第一步:配置文件(xml)配置:

1:添加searchable显示的xml文件;

2:AndroidManifest.xml中添加配置参数;

第二步:编写代码,调用SearchDialog。

1:编写SearchRecentSuggestionsProvider 实体类,用于保存搜索记录。

2:在需要使用搜索的当前活动(Activity),覆盖onSearchRequested方法,调用startSearch方法显示SearchDialog。

3:在显示搜索结果的活动(Activity),重写onNewIntent方法,处理查询。

注意:

第一步,示例代码。

//定义intent-filter接收SEACH Action事件。

<intent-filter>
               <action android:name="android.intent.action.SEARCH" />
               <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
<meta-data android:resource="@xml/searchable" android:name="android.app.searchable"></meta-data>

<?xml version="1.0" encoding="utf-8"?>
<searchable
xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/searchHint"   //需要用@string 方法,且必须要有label属性
android:hint="@string/searchHint"
android:searchMode="showSearchLabelAsBadge" >
</searchable>

指出了当执行搜索的字符串提交时,将调用哪一个activity去进行处理。
<meta-data
android:name="android.app.default_searchable"
android:value=".YourSearchActivity" /> 

第二步,示例代码。

//调用SearchDialog
    public boolean onSearchRequested() {
        // If your application absolutely must disable search, do it here.
// Next, set up a bundle to send context-specific search data (if any)
        // The bundle can contain any number of elements, using any number of keys;
        // For this Api Demo we copy a string from the user input field, and store
        // it in the bundle as a string with the key "demo_key".
        // For most applications, you can simply pass null to startSearch().
        Bundle appDataBundle = null;

        appDataBundle = new Bundle();

        // Now call the Activity member function that invokes the Search Manager UI.
        startSearch("111", false, appDataBundle, false);

        // Returning true indicates that we did launch the search, instead of blocking it.
        return true;
    }

当按下搜索按钮,调用onSearchRequested方法,系统就会自动发送Intent,action是Intent.ACTION_SEARCH.

//处理查询内容:
    /**
     * Called when new intent is delivered.
     *
     * This is where we check the incoming intent for a query string.
     *
     * @param newIntent The intent used to restart this activity
     */
    @Override
    public void onNewIntent(final Intent newIntent) {
        super.onNewIntent(newIntent);

        // get and process search query here
        final Intent queryIntent = getIntent();
        final String queryAction = queryIntent.getAction();
        if (Intent.ACTION_SEARCH.equals(queryAction)) {
            doSearchQuery(queryIntent, "onNewIntent()");
        }
        else {
            Toast.makeText(this, "onNewIntent(), but no ACTION_SEARCH intent", Toast.LENGTH_SHORT).show();
        }
    }

 /**
     * Generic search handler.
     *
     * In a "real" application, you would use the query string to select results from
     * your data source, and present a list of those results to the user.
     */
    private void doSearchQuery(final Intent queryIntent, final String entryPoint) {
      // The search query is provided as an "extra" string in the query intent
        final String queryString = queryIntent.getStringExtra(SearchManager.QUERY);

        Toast.makeText(this,queryString, Toast.LENGTH_SHORT).show();

        //保存搜索记录
        SearchRecentSuggestions suggestions=new SearchRecentSuggestions(this,
                SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
        suggestions.saveRecentQuery(queryString, null);

    }
 1 public class SearchSuggestionSampleProvider extends
 2         SearchRecentSuggestionsProvider {
 3      /**
 4      * This is the provider authority identifier.  The same string must appear in your
 5      * Manifest file, and any time you instantiate a
 6      * {@link android.provider.SearchRecentSuggestions} helper class.
 7      */
 8     final static String AUTHORITY = "com.example.testhttp.SuggestionProvider";
 9     /**
10      * These flags determine the operating mode of the suggestions provider.  This value should
11      * not change from run to run, because when it does change, your suggestions database may
12      * be wiped.
13      */
14     final static int MODE = DATABASE_MODE_QUERIES;
15
16     /**
17      * The main job of the constructor is to call {@link #setupSuggestions(String, int)} with the
18      * appropriate configuration values.
19      */
20     public SearchSuggestionSampleProvider() {
21         super();
22         setupSuggestions(AUTHORITY, MODE);
23     }
24 }

看了代码是不是有些熟悉,没错,来源Android SDK 的App Demo,所以写Android应用还是先浏览Android开发人员写的Demo,还是很有参考价值的!

时间: 2024-10-07 05:29:57

搜索栏 SearchDialog 的使用 不显示的问题的相关文章

Apache的下载以及安装

前言:生活,生下来,活下去 第一步:在浏览器的搜索栏输入:apache下载:显示如下,单机进入Apache的官网 官网页面显示: 第二步:单机下图中的链接: 第三步:单机后进入如下页面: 第四步:进入本页面下拉到底部,单机win32即可 第五步:下拉拖到底部,下载比较稳定的版本,如下: 至此,Apache的下载已经完成! 接下来说下具体的安装过程:直接跟着我的截图安装就好.这里就不在分步骤. 在这里子说下,启动Apache和关闭Apache服务: 第一种: 第二种:在cmd下,如下如所示: 总结

Jquery的DataTable插件 AJAX 服务器分页的的学习心得(java版)

首先得先引入对应的js 1.jquery.min.js  首先导入 2. File:        jquery.dataTables.min.js Version:     1.9.4     这是我使用的版本 这是  jsp 页面 关键的table  代码 <table id="fuck" class="table table-bordered data-table"> <thead> <tr> <span style=

win7 桌面上的网络邻居不见了

win7 桌面上的网络邻居不见了,可能是以前在桌面上直接删除了.现右击桌面--个性化--更改桌面图标,也找不到网上邻居了.怎么找回来啊? 网上邻居已经改名叫网络了.可以右键桌面选择“个性化”,然后更改桌面图标,在桌面显示网络的图标.网上邻居的设置在控制面板的“网络和共享中心”中. 或者点开始-搜索栏中输入 桌面 选择 显示隐藏桌面通用图标 把网络选勾. WIN7桌面网上邻居和我的文档图标不见了个性化里的不能图标勾选了也没反应,应该是上次中毒后没在意找到了 果然还是注册表的问题 把这个注册进去就O

datatable-bootstrap 基本配置

function doSearch() { if(dtable!=null){ dtable.fnClearTable(0); dtable.fnDraw(); // 重新加载数据 }else{ dtable = $("#datatable_ajax").dataTable({  //<span style="font-family: Arial, Helvetica, sans-serif;">datatable_ajax表单的id</span&

全网首发 商业级支付宝小程序入门与实战

第1章 课程导学与准备工作 本章主要介绍为何学习支付宝小程序,以及开发支付宝小程序能为我们带来哪些收获.之后会为大家介绍本课程内容具体安排,最后给出如何学好这门课程的一些学习建议.希望大家都能通过这门课程,学有所成,学有所归. 1-1 课程导学 第2章 初识支付宝小程序 本章首先会为大家介绍如何配置开发环境,如何使用蚂蚁开发者工具,随后我们会一起开发第一个hello world小例子,通过对开发工具以及基本文件类型的介绍,让大家快速熟悉支付宝小程序.为后面技术的学习,项目的开发做好基本准备.大家

百度CSND博客在搜索栏显示图片

这图片不会再百度栏显示. 通过这个按钮上传的图片是不会显示的,如: 只有通过下面的方法才可以显示,步骤如下: 1)在此处点选择文件,将你想要在百度搜索栏显示的图片上传. 2)选择图片,例如下面图片. 3)点击上传按钮 4)上传成功. 5) 百度搜索结果显示,如:

百度CSND博客在搜索栏中显示图片

原先以为百度搜索结果有图片是能够人为控制的,结果发现并非这样. 近期百度搜索结果的每一个条目左側出现了小图片,这一变化能够说是极大满足了用户的体验,不用进入站点就提前直观的推断出站点内容是否是自己要找的.此举对于那些用非相关关键词.标题吸引用户点击的站点也起到了非常好地遏制作用.以下我就来说一下怎样才干让网页内的图片被百度抓取放到搜索页上. 点击打开链接 看完链接后就明确了.仅仅要将图片打下设置为120*75就能够显示了. 1)下载要改变格式的图片 如: 次图片的大小为192*220: 2)打开

模拟百度搜索框,输入时显示历史记录

今天写了个小demo,利用本地存储的特点,模拟百度搜索框. 主要知识是利用本地存储的特点,模拟百度搜索时的历史记录显示. 主要HTML代码为 <div class="search"> <input type="text"/> <button class="btn">搜索</button> </div> <ul class="hidden"> <li&

C++开发人脸性别识别教程(9)——搭建MFC框架之显示图片

在之前的博客中我们已经实现读取用户选定的文件夹,并将其路径保存在相应的变量中,在这篇博文中我们将介绍如何借助CvvImage类将图片显示在picture控件中,并自动读取文件夹下的其他图片. 一.添加“下一张”按钮 由于我们需要读取文件夹下的所有图像文件,而非某一张文件,因此有必要添加一个按钮来进行控制,具体功能就是:每单击一次这个按钮,程序就会自动读取下一张图片并显示在界面上.由于之前已经详细介绍了MFC中添加Button控件的方式,这里不再赘述.添加一个按钮,命名为“下一张”,将ID更改为I