嵌入AppBar并且带搜索建议的搜索框(Android)

本文详细介绍了如何在Android应用中实现在AppBar中集成搜索框,并添加搜索建议功能。首先,通过创建`searchable.xml`配置搜索框,接着在`MainActivity`中配置AppBar,设置`SearchableActivity`来展示搜索结果。然后,创建内容提供器和数据库以提供搜索建议,利用SQLite和ORMLite管理数据。最后,通过修改`searchable.xml`添加搜索建议支持,并在`SearchableActivity`中处理搜索建议点击事件。
摘要由CSDN通过智能技术生成

先看结果:

相关的官方文档在这里:Creating a Search Interface

Android官方提供了两种方式:

  • 弹出一个Dialog,覆盖当前的Activity界面
  • 在AppBar中扩展一个搜索框。

    这个是上面动态图片展示的方式。以下介绍的是这种方式的实现。
    官方建议:如果你写的程序是给Android 3.0 以上的设备使用,那么推荐使用AppBar的方式。

想要完成这个功能,你需要创建以下几个文件:

  • 一个XML文件,用于配置搜索框。该文件路径:res/xml/searchable.xml

    该文件会被系统用来创建SearchableInfo对象

  • 一个用于接收搜索关键词并展示最终结果的Activity

  • 一个内容提供器,用于提供搜索建议

分为两部分写。先完成搜索功能,再添加提供搜索建议的功能。

第一部分:基本的搜索功能

这个部分完成五个文件的创建或修改:

  • MainActivity.java
    配置AppBar
  • SearchableActivity.java
    根据Intent的Action,显示intent的内容
  • res/xml/searchable.xml
    配置搜索框
  • res/menu/options_menu.xml
    添加搜索框及配置AppBar
  • AndroidManifest.xml
    配置SearchableActivity,使其接收ACTION_SEARCH的Intent

该版本的完整代码:SearchWidgetInAppBar - 完成基本的功能

searchable.xml

初始的xml:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="@string/search_hint"
    >
</searchable>

之后添加“搜索建议”功能的时候,还需要对它进行修改。

展示结果的Activity

当用户执行一个搜索的时候,系统会启动该Activity,并且传入搜索的词汇。这个词汇包含在Intent中,并且标记为ACTION_SEARCH动作。

现在创建一个简单地包含TextView的Activity就行了。这里将其命名为 SearchableActivity。

打开AndroidManifest.xml对该Activity进行配置:

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

由于intent-filter的设置,当接收到标记为ACTION_SEARCH的动作时,会启动该Activity。

SearchableActivity.java

public class SearchableActivity extends AppCompatActivity {

    TextView mTvWord = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_searchable);

        mTvWord = (TextView) findViewById(R.id.tv_word);

        Intent intent = getIntent();
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值