浮动搜索框的使用

先放程序截图:
调出的Search bar

SearchManger是在SDK 1.6版本后才出现的API,根据需要可以进行设置,可满足不同的搜索需求,如:手机联系人、电话号码、存储卡的图片、网页关键词等。

SearchManger的作用是提供对系统搜索服务的访问,并且通过搜索方法提供诸如语音搜索等。

首先是主界面的布局设置:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/et1"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:hint="存储搜索数据" />

    <Button
        android:id="@+id/bt1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="insert" />

</LinearLayout>

搜索结果的页面布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvquery"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tvdata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="search" />

</LinearLayout>

浮动搜索框的使用并不是学习的难点,真正繁琐的是它的配置,首先在res下新建一个xml文件夹,并在文件夹中新建seachable.xml,或者CTRL+N调出wizard,选择android xml,然后Resource中选择Searchable,并且在下面的Root Element也选择Searchable,具体如下图:

选择Searchable

接下来配置Searchable.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/_"
    android:label="@string/searchbar"
    android:searchMode="showSearchLabelAsBadge"
    android:searchSuggestAuthority="com.android.coding.SearchSuggestionSampleProvider"
    android:searchSuggestSelection=" ? " >

    <!-- 注意,这里label的属性不能直接写任何的String,只能引用放到string.xml中的字符串 -->

</searchable>

android:searchSuggestAuthority属性中指向的SearchSuggestionSampleProvider实际上是一个SearhRecentSuggestionsProvider的子类:

package com.android.coding;

import android.content.SearchRecentSuggestionsProvider;

/**
 * @ClassName SearchSuggestionSampleProvider
 * @Description 
 * @author Cheng
 * @date 2016-3-26
 */
public class SearchSuggestionSampleProvider extends
        SearchRecentSuggestionsProvider {

    public final static String authority =
       "com.android.cbin.SearchSuggestionSampleProvider";
    public final static int mode = DATABASE_MODE_QUERIES;

    public SearchSuggestionSampleProvider() {
        super();
        setupSuggestions(authority, mode);
    }

}

应用启动的第一个Activity为:MainActivity

package com.android.coding;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends ActionBarActivity implements OnClickListener {

    private EditText et_1;
    private Button bt_1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_1 = (EditText) findViewById(R.id.et1);
        bt_1 = (Button) findViewById(R.id.bt1);

        bt_1.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {

        onSearchRequested();
    }

    public boolean onSearchRequested() {
        String text = et_1.getText().toString();
        Bundle bundle = new Bundle();
        bundle.putString("data", text);
        /* 
         * 打开浮动搜索框(第一个参数默认添加到搜索框的值),bundle为            
         *  传递的数据
         */
        startSearch("Andy", false, bundle, false);
        /*
         * 一定要返回true,
         * 如果返回super.onSearchRequested()方法,则该搜索框默认
         * 值无法添加到搜索框中,bundle也无法传递出去
         */
        return true;
    }
}

处理搜索结果的Activity:SearchResultActivity

package com.android.coding;

import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.provider.SearchRecentSuggestions;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class SearchResultActivity extends ActionBarActivity implements OnClickListener {

    private Button btn_1;
    private TextView tv_query;
    private TextView tv_data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);
        tv_data = (TextView) findViewById(R.id.tvdata);
        tv_query = (TextView) findViewById(R.id.tvquery);
        btn_1 = (Button) findViewById(R.id.btn1);
        doSearchQuery();
        btn_1.setOnClickListener(this);

    }

    private void doSearchQuery() {
        final Intent intent = getIntent();

        String query = intent.getStringExtra(SearchManager.QUERY);
        tv_query.setText(query);

        SearchRecentSuggestions suggestion = new SearchRecentSuggestions(this,
                SearchSuggestionSampleProvider.authority,
                SearchSuggestionSampleProvider.mode);

        suggestion.saveRecentQuery(query, null);
        if ((intent.ACTION_SEARCH).equals(intent.getAction())) {
            Bundle bundled = intent.getBundleExtra(SearchManager.QUERY);
            if (bundled != null) {
                String data = bundled.getString("data");
                tv_data.setText(data);
            }else{
                tv_data.setText("no data!");
            }
        }
    }

    @Override
    public void onClick(View v) {
    //这里可以添加利用当前页面处理搜索结果的方法
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值