Android开发:Toolbar与SearchView实现搜索功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shakdy/article/details/80572704

本文内容

本章介绍:用Toolbar和SearchView实现搜索功能

设置主题
打开res/values/styles.xml文件,添加下面代码:

    <style name="ThemeNoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">#3F51B5</item>
        <item name="colorPrimaryDark">#303F9F</item>
        <item name="colorAccent">#FF4081</item>
        <item name="android:textColorPrimary">#00ff00</item>
    </style>

添加主题
打开AndroidManifest.xml文件,配置Activity或Fragment的主题,这里用的是Activity

 <activity
            android:name=".module.test.TestActivity"
            android:theme="@style/ThemeNoActionBar"
            android:label="@string/title_activity_test">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

SearchView的配置文件
打开res/menu目录,创建文件menu_main.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.bf.offline.MainActivity">
    <!--<item-->
        <!--android:id="@+id/action_settings"-->
        <!--android:orderInCategory="100"-->
        <!--android:title="@string/action_settings"-->
        <!--app:showAsAction="never" />-->

    <item android:id="@+id/search"
        android:title="搜索"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"
        />
</menu>

app:showAsAction

它有三个可选项

  1. always:总是显示在界面上
  2. never:不显示在界面上,只让出现在右边的三个点中
  3. ifRoom:如果有位置才显示,不然就出现在右边的三个点中

Toolbar的布局文件
在res/layout目录下,创建activity_test.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.happycomehealthy.module.test.TestActivity">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</LinearLayout>

使用Toolbar与SearchView的java文件

package com.happycomehealthy.module.test;

import android.app.SearchManager;
import android.content.Context;
import android.os.Bundle;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import com.happycomehealthy.R;
import com.happycomehealthy.module.main.MainActivity;
import com.happycomehealthy.widget.TextItemVew;

//注意这里不能继承Activity,而是继承AppCompatActivity
public class TestActivity extends AppCompatActivity {
    private String TAG = MainActivity.class.getSimpleName();

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

    private void initToolBar() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);//这句代码使启用Activity回退功能,并显示Toolbar上的左侧回退图标
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);

        // Get the SearchView and set the searchable configuration
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
        // Assumes current activity is the searchable activity
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
            @Override
            public boolean onQueryTextSubmit(String query) {
                Log.i(TAG,query);
                Toast.makeText(TestActivity.this,query,Toast.LENGTH_SHORT).show();
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId() == android.R.id.home){
            Log.i(TAG,"back");
            Toast.makeText(this,"back",Toast.LENGTH_SHORT).show();
        }
        return true;
    }

}

猜你喜欢

转载自blog.csdn.net/shakdy/article/details/80572704