0%

Android 在应用程序中按search键弹出搜索框(可自动弹出)

如果你的APP有搜索数据的功能,可以给程序加个类似于系统自带的搜索功能,按搜索键,会在屏幕顶部弹出一个输入框,可以搜索短信、音乐、联系人、网页等等。下面就来实现。 首先,我们要在AndroidManifest.xml给我们的Activity加上一个intent-filter:

            <intent-filter>
                <action android:name="android.intent.action.SEARCH"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
            <!-- 上面的intent-filter就是用来匹配搜索功能的,下面一行指定的是搜索框配置文件 -->
            <meta-data android:name="android.app.searchable" android:resource="@xml/search"/>

这样,当用户按下搜索键时,系统就会弹出搜索框以及软键盘,等待用户输入。 下面是xml/search.xml源代码(新键-Android XML File,选择Searchable就可以创建):

<?xml version="1.0" encoding="utf-8"?>
<searchable
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:label="@string/search_label"
  android:hint="@string/search_hint"
  >
</searchable>
<!-- 
label:标签,可以任意填
hint:输入框中的提示
经测试,这两个值必须引用string,直接写死就不会跳出搜索框
 -->

上面的两个值先写进strings.xml中。 下面是程序中获取用户输入字符串的方法:

package com.pocketdigi.search;

import android.app.Activity;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent intent = getIntent();
        //得到Intent对象
        String action = intent.getAction();
        //得到action值
        if (Intent.ACTION_SEARCH.equals(action))
        {//如果是搜索的action
          String query = intent.getStringExtra(SearchManager.QUERY);
          //得到查询关键字
          System.out.println(query);
          
        }
    }
}

另外,如果需要在程序中触发弹出搜索框而不是按Search键,可以使用下面的Java代码

onSearchRequested();

附上打包源文件: [download id=”17”]