1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > android实现通知栏搜索功能 actionBar+SearchView实现搜索功能

android实现通知栏搜索功能 actionBar+SearchView实现搜索功能

时间:2021-02-25 05:49:11

相关推荐

android实现通知栏搜索功能 actionBar+SearchView实现搜索功能

在项目中有使用到ActionBar和SearchView,下面做一个总结以方便以后使用。

一、搜索控件:SearchView(SDK Version >=11)

(一)比较重要的方法和属性:

1、setIconifiedByDefault (boolean iconified):如果为true,UI一开始是一个放大镜,点击放大镜会一个editText和一个图标;如果为false,UI直接显示editText和一个图标。

2、SearchView.OnQueryTextListener:用于监听和处理 editText中文字发生改变或者点击了提交按钮的事件。

(二)搜索功能的实现

1、通过布局文件和SearchView.OnQueryTextListener

布局文件

android:id="@+id/sv_searchview"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:iconifiedByDefault="false"

android:queryHint="@string/query_hint" >

MainActivity

getActionBar().setDisplayHomeAsUpEnabled(true);

getActionBar().setDisplayShowTitleEnabled(false);

getActionBar().setDisplayShowCustomEnabled(true);

View view = getLayoutInflater().inflate(R.layout.custom_searchview,

null);

LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,

LayoutParams.WRAP_CONTENT);

getActionBar().setCustomView(view, layoutParams);

searchView=(SearchView)view.findViewById(R.id.sv_searchview);

searchView.setOnQueryTextListener(this);

2、searchable

步骤:

1)在res/xml/新建searchable.xml文件夹:

android:label="@string/searchable_label"

android:hint="@string/searchable_hint">

特别要注意的是:必须要使用如android:label="@string/searchable_label"这种方式赋值,直接在冒号里写值会导致SearchableInfo==null;

2)在菜单文件main.xml中加入

android:id="@+id/action_search"

android:title="Search"

android:orderInCategory="100"

android:showAsAction="collapseActionView|ifRoom"

android:icon="@android:drawable/ic_menu_search"

android:actionViewClass="android.widget.SearchView" />

特别注意,android:actionViewClass="android.widget.SearchView"不要写错了,我就是将widget写错,导致获取不到SearchView

android:showAsAction="collapseActionView|ifRoom",其中collapseActionView是指折叠控件,ifRoom是指在屏幕有空间的情况下显示控件,showAsAction的其他值:

never-一直显示在更多(...)里

always-一直显示控件

withText-显示文字(默认只显示图标)

2)新建一个serarchable activity

3)修改AndroidManifest.xml,新增如下代码:

android:name="com.dream.actionbardemo.SearchActivity"

android:label="@string/app_name" >

4)MainActivity中的代码:

@Override

public boolean onCreateOptionsMenu(Menu menu) {

super.onCreateOptionsMenu(menu);

getMenuInflater().inflate(R.menu.main, menu);

MenuItem searchItem=menu.findItem(R.id.action_search);

SearchManager searchManager=(SearchManager)this.getSystemService(Context.SEARCH_SERVICE);

SearchView searchView=(SearchView) searchItem.getActionView();

if(searchView==null){

showMsg("searchView is null");

return true;

}

ComponentName cn=new ComponentName(this,SearchActivity.class);

SearchableInfo info=searchManager.getSearchableInfo(cn);

if(info==null){

showMsg("cannot get the SearchableInfo");

}

searchView.setSearchableInfo(searchManager.getSearchableInfo(cn));

searchQueryTextListener=new SearchQueryTextListener();

searchView.setOnQueryTextListener(searchQueryTextListener);

searchView.setIconifiedByDefault(false);

return true;

}

5)searchactivity中的代码

package com.dream.actionbardemo;

import android.app.Activity;

import android.app.SearchManager;

import android.content.Intent;

import android.os.Bundle;

import android.widget.TextView;

public class SearchActivity extends Activity{

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_search);

tv=(TextView)findViewById(R.id.tv_search_queryText);

String action=getIntent().getAction();

if(action.equals(Intent.ACTION_SEARCH)){

String queryString=getIntent().getStringExtra(SearchManager.QUERY);

tv.setText(tv.getText()+queryString);

}

}

}

对于搜索,可以使用searchview,也可以使用自定义控件,自定义控件可以实现更多效果。可以通过actionBar.setCustomView(); 来将自定义控件显示在ActionBar中。

二、ActionBar

ActionBar 是android 3.0之后出现的带有导航功能的标题栏;

我就简单记录下我在开发过程中遇到的问题希望以后不要再重复错误。

1、标题栏不出现的问题或者getActionBar为null:有些application的主题是不会显示标题栏的,所以要改一下主题,设置为,比如:

android:theme="@android:style/Theme.Holo"

等能显示标题栏的主题

三、参考资料

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。