ActionBar中的SearchView drawables显得模糊

And*_*nko 8 android android-actionbar

我的ActionBar有以下菜单布局:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:id="@+id/itemSearch"
        android:icon="@drawable/actionbar_icon_search"
        android:showAsAction="ifRoom|collapseActionView"
        android:actionViewClass="android.widget.SearchView" 
        android:title="Search"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

这是设置代码:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.actionbar_default, menu);

    SearchView searchView=(SearchView) menu.findItem(R.id.itemSearch).getActionView();
    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    View searchEditText = searchView.findViewById(searchPlateId); 
    ((TextView) searchEditText).setTextColor(Color.WHITE);
    searchView.setOnCloseListener(new OnCloseListener() {...});
    searchView.setOnQueryTextListener(new OnQueryTextListener() {...});
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了一件事:在我的华硕平板电脑(TF-201,Android 3.2.1)上,图形模糊:

在此输入图像描述

如果我删除android:actionViewClass="android.widget.SearchView",一切看起来都正常:

在此输入图像描述

4.1.2模拟器上不再复制此问题.我试着只留下菜单通胀代码,onCreateOptionsMenu()但这没有帮助.

我该如何解决?

Mar*_*era 4

所以我击败了这个解决方案,但是,如果不使用 ActionBarSherlock 库,它仅声明对 API 14 及更高版本的正确兼容性。


第一个解决方案(API 14+)

重要的是要连接到应用程序的主题上下文,否则您将获得 SearchView 的最低设计(模糊的图标)

以编程方式创建 SearchView

分段

SearchView searchView =
                new SearchView(getActivity().getActionBar().getThemedContext());
Run Code Online (Sandbox Code Playgroud)

活动

SearchView searchView = new SearchView(getActionBar().getThemedContext());
Run Code Online (Sandbox Code Playgroud)

第二种解决方案(ABS 兼容性,API 8+)

操作栏夏洛克片段

SearchView searchView = 
  new SearchView(getSherlockActivity().getSupportActionBar().getThemedContext());
Run Code Online (Sandbox Code Playgroud)

行动栏夏洛克活动

SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
Run Code Online (Sandbox Code Playgroud)

第三种解决方案(API 11+)

在某些情况下,设置SearchView.setBackgroundColor(int color)会使图标看起来不那么模糊,请尝试Color.WHITEColor.BLACK

请注意,这会更改 MenuItem 的背景颜色,无论是否折叠,例如。通过使用主题 Holo.Light.DarkActionBar,您需要根据您的 ActionBar 样式使用正确的颜色。