《Android平板电脑开发秘籍》——3.6节技巧:在ActionBar中显示Action View

本节书摘来自异步社区《Android平板电脑开发秘籍》一书中的第3章,第3.6节技巧:在ActionBar中显示Action View,作者 【印度】B.M. Harwani,更多章节内容可以访问云栖社区“异步社区”公众号查看

3.6 技巧:在ActionBar中显示Action View
Android平板电脑开发秘籍
为了更便捷地执行Action,Action View提供了内嵌的控件。从本质上说,Action View允许在ActionBar内放入一个自定义View。Android应用程序最常用的Action View就是SearchView。SearchView提供了一个用户界面,以便输入搜索请求并提交给搜索Provider。如果存在可用的建议项或者结果项,它还能把它们列出来,以便用户能够从中选择。为了能侦测到SearchView中发生的事件,将setOnQueryTextListener设为侦听器(Listener),以便在用户输入或改变文本时做出响应。OnQueryTextListener中需要实现两个方法:onQueryTextChange和onQueryTextSubmit。一旦用户改变了搜索文本,onQueryTextChange方法就会被调用。onQueryTextSubmit则会在用户输入回车或按下搜索按钮时被调用。

为了理解Android应用程序中Action View的使用,请新建一个名为ActionViewApp的Android项目。在此应用程序中,将把SearchView作为Action View显示,用户可以在其中输入要搜索的文本。要显示SearchView,请把代码清单3-4给出的代码写入菜单文件activity_action_view_app.xml,此文件位于res/menu文件夹中。

代码清单3-4 写入菜单文件activity_action_view_app.xml的代码

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/action_search"
        android:title="Search"
        android:showAsAction="ifRoom"
        android:actionViewClass="android.widget.SearchView"/>
</menu>

通过这段代码,SearchView将会显示为一个图标,如图3-4上所示。通过把android:showAsAction属性做如下设置,还可以让SearchView显示成一个Action项。

android:showAsAction="ifRoom|collapseActionView"
还记得吧,collapseActionView使得与Action项关联的Action View可折叠显示,也就是说,它能让Action View折叠成一个正常Action项显示。现在,SearchView将会显示为一个Action项,如图3-4中所示。不管用图标还是Action项方式,在点击SearchView之后,将会打开一个搜索框,用户可以在其中输入需要搜索的文字(见图3-4下)。


47069d7d573c41e98d462726c7ac2080afed2e90

图3-4 以图标方式显示的SearchView(上),以Action项方式显示的
SearchView(中),点击SearchView后出现的搜索框(下)

为了理解事件侦听器setOnQueryTextListener是如何工作的,将把用户在搜索框中输入或修改的文字显示在日志信息栏(Log Message)中。还会把搜索框中最终录入的文本显示出来。要实现这些任务,请把代码清单3-5给出的代码写入Java Activity文件 ActionView AppActivity.java。

代码清单3-5 写入Java Activity 文件ActionViewAppActivity.java的代码

package com.androidtablet.actionviewapp;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
import android.util.Log;
public class ActionViewAppActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_action_view_app);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_action_view_app, menu);
        SearchView searchView = (SearchView) menu.findItem(
            R.id.action_search).getActionView();
        searchView.setOnQueryTextListener(new
            OnQueryTextListener(){
            @Override
            public boolean onQueryTextChange(String newText) {
                Log.d("New Text:", newText);
                return false;
            }
            @Override
            public boolean onQueryTextSubmit(String query) {
                Log.d("Final Text:", query);
                return false;
            }
        });
        return true;
    }
}

可以看到,这里从菜单文件中获取了ID为action_search 的SearchView Widget,并赋给了SearchView对象searchView。把setOnQueryTextListener与SearchView对象searchView关联起来,这样用户在搜索框中输入或提交文本时,将会采取必要的处理。一旦用户在搜索框中输入或修改文本,onQueryTextChange()方法就会被调用。在onQueryTextChange()方法中,将把搜索框中修改过的文本以日志的方式显示出来。当用户按下回车或搜索按钮完成输入后,将会调用onQueryTextSubmit()方法,将把搜索框中录入的完整文本通过日志信息显示出来。

运行此应用程序后,将看到以图标方式显示在ActionBar中的SearchView(见图3-5上)。当用户按下ActionBar 中的SearchView时,将会出现一个搜索框,提示需要搜索的文本(见图3-5中)。搜索框中的完整文本将显示在日志信息页中,见图3-5下。


14bf9f3c1b3d7a0007230cc1777c1d38322a72f7

图3-5 应用程序启动时显示的SearchView(上),点击SearchView之后出现搜索
框以输入文字(中),显示搜索框中的文字如何被录入或修改的日志信息(下)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值