0

我想在我的搜索按钮图标为白色时更改搜索图标。

因此我找到了一个代码来获取搜索按钮的视图。

SearchView searchView = (SearchView) menu.findItem(R.id.action_search)
                .getActionView();
        //SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
        //searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        int searchImgId = getResources().getIdentifier("android:id/search_button", null, null);
        AppCompatImageView v = (AppCompatImageView) searchView.findViewById(searchImgId);
        v.setImageResource(R.drawable.action_search);

即使我将 AppCompatImageView 更改为 ImageView,我仍然有 null。我猜 searchView 的搜索按钮上的 ID 与 searchImgId 不匹配,所以我得到空值。如何获得正确的 ID 来检索搜索按钮。

4

2 回答 2

0

我认为您没有膨胀菜单 xml 文件。你可以这样做,这就是你得到空值的原因。您必须先扩充您的菜单文件,然后才能从那里获取您的搜索按钮 ID。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.sample_actions, menu);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));

        searchView.setOnQueryTextListener(this);
        searchView.onActionViewExpanded();
        return super.onCreateOptionsMenu(menu);
    }

sample_action.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:title="@string/menu_search"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:icon="@drawable/search_white"/>
</menu>
于 2016-01-07T04:34:31.387 回答
-1

更新

你可能正在寻找这个

searchView.setBackgroundColor(Color.BLACK);

但是你想完全自定义它,你可以试试这个,我建议的是更少的代码,让 UI 自己处理。

我知道它是白色的,我知道这不是你想要的。您可以轻松地将其自定义为任何内容drawable,并且还可以让您更自由地使用它

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_margin="8dp"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginRight="-50dp"
            android:layout_weight="1"
            android:hint="some Text"
            android:paddingLeft="4dp" />

        <ImageView
            android:id="@+id/imageButton"
            style="?actionBarStyle"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@android:drawable/ic_menu_search" />
    </LinearLayout>

输出

这种布局看起来像这样,您可以在其中轻松更改搜索并根据要求imageView更改属性。editText

因此,您View将在布局中得到照顾,因此您将仅对功能进行编码。更多喜欢Android的方式

在此处输入图像描述

于 2016-01-07T05:11:47.693 回答