在AppBar中展开SearchView图标? - Android

时间:2016-03-08 11:17:07

标签: android searchview

我有这段代码:

 @Override
public boolean onCreateOptionsMenu(Menu menu) {

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

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);


    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.action_logout) {

        Intent activity2 = new Intent(ActivityFrontend.this, LoginPage.class);
        startActivity(activity2);

    }

    if (id == R.id.action_search) {


        Toast.makeText(ActivityFrontend.this, "Toast OK!", Toast.LENGTH_SHORT).show();
    }

    return super.onOptionsItemSelected(item);
}

这是我的菜单xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<!--<item-->
    <!--android:id="@+id/action_logout"-->
    <!--android:orderInCategory="100"-->
    <!--android:title="@string/action_logout"-->
    <!--app:showAsAction="never" />-->

<!--<item android:id="@+id/action_search"-->
    <!--android:title="Search..."-->
    <!--android:icon="@drawable/ic_search_black_24dp"-->
    <!--android:showAsAction="always"-->
    <!--android:actionViewClass="android.widget.SearchView" />-->

<item
    android:id="@+id/action_logout"
    android:orderInCategory="100"
    android:title="@string/action_logout"
    app:showAsAction="never" />

<item android:id="@+id/action_search"
    android:title="Search..."
    android:icon="@drawable/ic_search_white_24dp"
    app:showAsAction="ifRoom"
    android:actionViewClass="android.widget.SearchView" />

我想在用户点击它时展开appbar中的搜索图标。我所遵循的教程对我没有用。 我能怎么做? 提前谢谢。

2 个答案:

答案 0 :(得分:0)

当你触摸图标时,你需要对它进行回调。注册这样的回调

searchView.setOnSearchClickListener(new View.OnClickListener()

{

            @Override
            public void onClick(View v)
           {
           //write your onclick event here
            }

}

答案 1 :(得分:0)

在xml文件夹中创建可搜索的配置
searchable.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" />

在清单文件中,声明指向res / xml / searchable.xml的元数据元素

<activity ... >
...
<meta-data android:name="android.app.searchable"
        android:resource="@xml/searchable" />

在关联可搜索配置文件

之前创建的onCreateOptionsMenu()中
 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, 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;
}

创建可搜索的活动并添加intentfilter

<intent-filter>
    <action android:name="android.intent.action.SEARCH" />
</intent-filter>

在该活动中处理此意图

private void handleIntent(Intent intent) {

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        String query = intent.getStringExtra(SearchManager.QUERY);
        //use the query to search your data somehow
    }
}