Android SearchView格式

时间:2015-10-08 09:34:09

标签: android searchview spannablestring

现在在这个问题上花了太长时间。已经解决了大部分问题,但仍在努力寻找搜索提示图标。经过广泛搜索后,这段代码可以在我的片段中使用

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
    mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));

    mSearchView.setIconifiedByDefault(true);

    int id = mSearchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    mSearchViewTextView = (TextView) mSearchView.findViewById(id);
    mSearchViewTextView.setTextColor(Color.WHITE);
    mSearchViewTextView.setHintTextColor(Color.WHITE);
    mSearchViewTextView.setBackgroundResource(R.drawable.action_textfield_search_alpha);

    mSearchViewSsb = new SpannableStringBuilder("   ");
    mSearchViewSsb.append(getResources().getString(R.string.fragment_friend_add_search_hint));
    Drawable searchHintIcon = ContextCompat.getDrawable(MyApplication.getContext(), R.drawable.action_search);
    int textSize = (int) (mSearchViewTextView.getTextSize() * 1.25);
    searchHintIcon.setBounds(0, 0, textSize, textSize);
    mSearchViewSsb.setSpan(new ImageSpan(searchHintIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    mSearchViewTextView.setText(mSearchViewSsb);

    int id1 = android.support.v7.appcompat.R.id.search_close_btn;
    ImageView searchCloseIcon = (ImageView) mSearchView.findViewById(id1);
    searchCloseIcon.setImageResource(R.drawable.action_close);

    int id2 = android.support.v7.appcompat.R.id.search_button;
    ImageView searchIcon = (ImageView) mSearchView.findViewById(id2);
    searchIcon.setImageResource(R.drawable.action_search);

    super.onCreateOptionsMenu(menu, getActivity().getMenuInflater());

    mSearchView.setOnSearchClickListener(...);

    mSearchView.setOnQueryTextListener(...);

}

但是,当我在onCreateOptionsMenu中调用它时,它只能工作一次。我试图在setOnQueryTextListener中重用它,但无论我做什么,应用程序然后崩溃或只是忽略更改。

此外,当设置一次好奇的是你第一次按下取消按钮两次时,第一次按下取消按钮时,SearchView TextView具有所有增强功能,但SearchHint图标会返回到它的原始形式。

我需要的是SearchHint图标为白色。

我的主题设置为Theme.AppCompat.Light.DarkActionBar

1 个答案:

答案 0 :(得分:0)

如果您只想将图标设为白色,可以将以下代码添加到菜单文件

   <item
        android:id="@+id/action_search"
        android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
        android:title="@string/search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always|collapseActionView"/>