Aggiungere la ricerca nella App Bar in Android

Mattepuffo's logo
Aggiungere la ricerca nella App Bar in Android

Aggiungere la ricerca nella App Bar in Android

Quello che vediamo oggi è come aggiungere una icona nella App Bar di Android che al click apre la possibilità di eseguire la ricerca.

Non implementeremo la ricerca vera e propria, ma faremo tutto il resto.

Cominciamo con il creare il file res/menu/options_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Cerca"
        app:actionViewClass="android.widget.SearchView"
        app:showAsAction="always" />
</menu>

Il drawable l'ho scaricato da internet; voi metteteci quello che volete.

Proseguiamo con res/layout/activity_search.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/ricerca"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

</LinearLayout>

Aggiungiamo res/xml/sercheable.xml:

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

In questo modo non abbiamo problemi con il resto del codice.

Adesso creiamo la SearchActivity, che sostanzialmente rappresenterebbe il risultato della ricerca:

package com.easytrack.app;

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

public class SearchActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        handleIntent(getIntent());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        setIntent(intent);
        handleIntent(intent);
    }

    private void handleIntent(Intent intent) {
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            String query = intent.getStringExtra(SearchManager.QUERY);
        }
    }
}

Questa la dobbiamo aggiungere al file AndroidManifest come tutte le altre:

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">

        ...................

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

    </application>

Infine nella nostra Activity:

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu, menu);
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        return true;
    }

Enjoy!


Condividi

Commentami!