【问题标题】:Android Action Bar SearchView Menu Icon SizeAndroid 操作栏 SearchView 菜单图标大小
【发布时间】:2014-05-20 13:54:16
【问题描述】:

我在活动的操作栏中实现了SearchView,它工作正常,并且会在 Galaxy Nexus 和大多数模拟器上按预期显示。然而,在 Galaxy Note 10.1 和具有平板大小屏幕的模拟器上,它看起来像这样:

如您所见,搜索图标比其他图标小得多。如何获得搜索图标的图标大小以匹配其他图标?或者如何在大屏幕上统一图标大小?

起初我认为问题可能与drawable的大小有关,但在检查它们后,我可以确认图标始终存在于项目drawable-hdpidrawable-mdpidrawable-xhdpi资源文件夹中,并且是与其他菜单图标大小相同。我使用this tool 来生成drawables,并且没有任何drawables 的大小不规则。我什至尝试使用与其他菜单图标之一相同的可绘制对象,结果大小差异是相同的。

图标在SearchView 打开时保持相同大小(这很好,否则它可能会与EditText 视图的下划线重叠),但是当SearchView 再次关闭时,图标大小相同,并且仍然比其他图标小得多,这可能是为什么会发生这种情况的线索。

活动代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.example, menu);
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        final SearchView search = (SearchView) menu.findItem(R.id.search).getActionView();
        final MenuItem item = menu.findItem(R.id.search);
        search.setSearchableInfo(manager.getSearchableInfo(getComponentName()));
} else {
    menu.removeItem(R.id.search); // API < 11
    }   
    return true;
}

res/menu/example.xml

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

    <item android:id="@+id/search"
        android:title="@string/search"
        android:icon="@drawable/search"
        android:showAsAction="ifRoom"
        android:actionViewClass="android.widget.SearchView" />

</menu>

res/xml/searchable.xml

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/search"
    android:hint="@string/search" >
</searchable>

AndroidManifest.xml

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

<meta-data
    android:name="android.app.default_searchable"
    android:value="com.example.ExampleActivity" />
<meta-data
    android:name="android.app.searchable"
    android:resource="@xml/searchable" />

更新:

抱歉,这个问题实际上与可绘制对象有关。特别是菜单图标的大小比例。 hdpi-drawable 菜单图标本来应该是 48x48 (x1.5),但都是 64x64 (x2)。

所以这个问题可以通过将所有 mdpi-drawable 菜单图标的大小重新调整为 32x32 和 hdpi-drawable 到 48x48 和 xhdpi-drawable 到 64x64 来解决(感谢 @rekire 的建议)。

问题是由使用旧版本的this tool 生成菜单图标引起的。因此,如果您有同样的问题,您可以尝试使用最新版本生成新图标。

【问题讨论】:

    标签: android android-actionbar searchview


    【解决方案1】:

    我能想到的唯一一件事是您将一个太小的图像放在一个可绘制目录中。请检查图像尺寸是否从ldpimdpihdpixhdpi、xxhdpi 增长到xxxhdpi

    默认像素尺寸为mdpi 32x32hdpi 48x48xhdpi 64x64

    还可以查看我的calculator,它会为您计算出正确的图像尺寸。

    【讨论】:

    【解决方案2】:

    使用drawable作为位图 调整大小 使用位图 xml

    How to Resize a Bitmap in Android?

    SearchView searchView = ((SearchView) searchMenuItem.getActionView());
                int searchImgId = android.support.v7.appcompat.R.id.search_button;
                Drawable searchIcon = scaled drawable .....
    searchView.findViewById(searchImgId)).setImageDrawable(searchIcon);
    

    【讨论】: