安卓操作栏SearchView菜单图标大小

6
我已经将一个SearchView实现到了一个活动的操作栏中,它可以在Galaxy Nexus和大多数模拟器上正常工作并显示预期效果。但是,在Galaxy Note 10.1和具有平板电视大小屏幕的模拟器上,它看起来像这样:

Screenshot of SearchView menu icon size problem

您可以看到,搜索图标比其他图标小得多。我怎样才能使搜索图标的大小与其他图标相匹配?或者如何在大屏幕上统一图标大小?
起初,我认为问题可能与可绘制对象的大小有关,但在检查它们后,我可以确认该项目中的图标始终存在于drawable-hdpi, drawable-mdpidrawable-xhdpi资源文件夹中,并且与其他菜单图标大小相同。我使用此工具生成可绘制对象,并且没有任何可绘制对象的大小不规则性。我甚至尝试使用与其他菜单图标之一相同的可绘制对象,结果大小差异相同。
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" />

更新:

很抱歉,这个问题实际上与可绘制对象有关。具体来说是菜单图标的大小比例。在应该为48x48(x1.5)时,hdpi-drawable菜单图标全部为64x64(x2)。

因此,这个问题可以通过重新调整所有mdpi-drawable菜单图标为32x32、hdpi-drawable为48x48和xhdpi-drawable为64x64来解决(感谢@rekire提出这个建议)。

该问题是由使用旧版本这个工具生成菜单图标造成的。如果您遇到相同的问题,可以尝试使用最新版本生成新的图标。

2个回答

5
我想你可能在其中一个drawable目录中放置了太小的图像。请检查图像尺寸是否从ldpimdpihdpixhdpi,xxhdpi增加到xxxhdpi
默认像素尺寸为mdpi 32x32hdpi 48x48xhdpi 64x64
还可以使用我的计算器,它会为您计算正确的图像尺寸。

文档说明此图标应为32x32dp大小。参考:http://developer.android.com/design/style/iconography.html#action-bar - rekire
drawable-mdpi文件夹中的所有菜单图标都是32x32像素。我使用了这个工具来生成所有的图标:http://android-ui-utils.googlecode.com/hg/asset-studio/dist/icons-actionbar.html - tpbapp
停止使用像素(px),应该使用密度无关像素(dp)!不过那个工具应该可以正常工作。 - rekire
2
请确保您使用了以下像素尺寸:mdpi 32x32,hdpi 48x48和xhdpi 64x64。 - rekire
谢谢!这就是问题的原因。 - tpbapp
显示剩余2条评论

2

使用可绘制对象作为位图

调整大小

使用位图XML

如何在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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接