SearchView不能填满整个宽度

7

我正在通过菜单将SearchView添加到我的工具栏中:

<?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:icon="@drawable/ic_search_white"
        android:orderInCategory="0"
        android:title="@android:string/search_go"
        android:visible="true"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:iconifiedByDefault="false"
        app:showAsAction="always" />
</menu>

我不知道为什么,但是SearchView被移动到了右边:enter image description here 有任何想法为什么会发生这种情况?
4个回答

3
我遇到了同样的问题,尝试在程序中添加以下代码:
searchView.setMaxWidth( Integer.MAX_VALUE );

如果这不起作用,请将<item>标签替换为<SearchView>

如果使用API 20及以上版本,请执行以下操作
将以下内容添加到您的styles.xml文件中:

/*Theme name and parent can be different - depends on the one that already 
declared in you manifest under the tag <application> theme:AppTheme*/
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> /
    <item name="searchViewStyle">@style/SearchView</item>
</style>

<style name="SearchView" parent="Widget.AppCompat.SearchView">
    <item name="android:maxWidth">@dimen/maxSize</item>
</style>
<dimen name="maxSize">1000dp</dimen>

我使用了searchView.setMaxWidth(Integer.MAX_VALUE); 并且使用了<SearchView>而不是菜单和<item>,但什么都没有起作用。 - Dawid Hyży
@DawidHyży 试试这个。 - Nir Duan
由于时间不足,我不得不使用RelativeLayout、EditText和ImageButton来模仿SearchView。下次我会尝试其他方法。 - Dawid Hyży

2

我曾经遇到过同样的问题,但在我的情况下,我在工具栏中(在布局文件中)有一个菜单抽屉图标图像,并且同时以编程方式启用了主页按钮,如下所示:

getSupportActionBar().setDisplayHomeAsUpEnabled(true)

将其设置为false(或删除此代码)为抽屉图标和SearchView释放了空间。希望这能帮助某些人。


0

我有一个类似的问题,设置setMaxWidth(Integer.MAX_VALUE)可以解决问题,但是菜单的其他项目没有显示出来。

在这个页面https://material.io/components/app-bars-top#specs中,它指出工具栏的填充为16dp,项和间距的大小为24dp。

所以,我保存了这些尺寸。

<dimen name="app_bar_padding">16dp</dimen>
<dimen name="app_bar_size_menu_item">24dp</dimen>

然后,我设置了setMaxWidth以便为搜索计算更好的宽度(像素)

// appBarWidth - 2 * margin app - menu item size
val appBarPadding = resources.getDimensionPixelSize(R.dimen.app_bar_padding)
val menuItemSize = resources.getDimensionPixelSize(R.dimen.app_bar_size_menu_item)
searchView.maxWidth = binding.toolbar.width - 2 * appBarPadding - menuItemSize

这个例子只是针对一个项目的。如果您有更多的项目,请不要忘记在项目之间加上空格

结果:

enter image description here


0
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.options_menu, menu)

    // Make SearchView fill screen width
    ((menu?.findItem(R.id.action_bar_search)?.actionView) as SearchView).apply {
        maxWidth = 1999
    }
    
    return true
}
  1. action_bar_search 是菜单 XML 中项目 ID 的名称。
  2. 最大宽度需要高于 1000 才能填充视图。 虽然文档没有说明如何实现,但它们有一个示例,展示了如何访问 maxWidth 方法。

https://developer.android.com/training/search/setup#create-sc


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