如何删除始终可见的搜索视图中的空白空间?

Posted

技术标签:

【中文标题】如何删除始终可见的搜索视图中的空白空间?【英文标题】:How to remove empty space in always visible searchview? 【发布时间】:2021-03-09 15:58:50 【问题描述】:

我试图在我打开我的应用并使其获得焦点后立即显示一个搜索视图,并防止返回箭头<-,因为按下返回会导致:

    首先关闭键盘 然后搜索视图折叠,清除查询以及显示的结果导致一个空片段 --- 我宁愿跳过这个并直接进入 3,退出活动强> 那么退出活动需要第三次返回

我只想要最多 2 次后退操作来退出活动。所以我在搜索片段中做了以下操作:

public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater) 
  inflater.Inflate(Resource.Menu.search, menu);

  var searchMenu = menu.FindItem(Resource.Id.action_search);
  searchMenu.ExpandActionView();
  _searchView = searchMenu.ActionView.JavaCast<SearchView>();
  _searchView.SetIconifiedByDefault(false); // <-- I added this
  _searchView.RequestFocus();
  _searchView.QueryTextChange += async (s, e) => 
    await PerformSearch(e.NewText);
  ;

  var searchText = _searchView.FindViewById<TextView>(Resource.Id.search_src_text);
  searchText.TextAlignment = TextAlignment.Center;
  searchText.Hint = Resources.GetString(Resource.String.search_hint);

  base.OnCreateOptionsMenu(menu, inflater);

菜单:

<?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"
        android:text="Search"
        app:showAsAction="always" <-- I took out collapseActionView from here
        app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

现在,一旦我的活动启动并切换到片段,我就会在左侧看到这个空白区域,我该如何摆脱它?

【问题讨论】:

【参考方案1】:

这是Android OptionsMenu中默认的空格,不能修改。如果您的 OptionsMenu 仅包含一个 SearchView 项,则有一种方法可以减少其长度。不能使用OptionsMenu,直接将SearchView添加到Toolbar。你知道OptionsMenu也是基于Toolbar创建的。

因此,您可以找到Toolbar的xml代码并添加SearchView如下:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_
    android:layout_
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/AppTheme.PopupOverlay" >

    <android.support.v7.widget.SearchView
        android:id="@+id/searchView"
        android:text="Search"
        android:layout_
        android:layout_ />

</android.support.v7.widget.Toolbar>

Activiy中,同样添加焦点功能代码:

Android.Support.V7.Widget.SearchView searchView = FindViewById<Android.Support.V7.Widget.SearchView>(Resource.Id.searchView);
searchView.SetIconifiedByDefault(false);
searchView.RequestFocus();
searchView.QueryTextChange += (s, e) =>

    //await PerformSearch(e.NewText);
    Console.WriteLine(e.NewText);
;

var searchText = searchView.FindViewById<TextView>(Resource.Id.search_src_text);
searchText.TextAlignment = TextAlignment.Center;
searchText.Hint = Resources.GetString(Resource.String.search_hint);

效果:

【讨论】:

以上是关于如何删除始终可见的搜索视图中的空白空间?的主要内容,如果未能解决你的问题,请参考以下文章

如何保持 Tableview 滚动以及如何在 Swift3 中删除原型单元和 tableview 之间的空白空间

如何通过删除状态栏、快速访问和拆分视图控件来节省 Eclipse 中的垂直空间?

删除图像视图周围的空白

如何删除 backBarButtonItem 空白空间

如何从集合视图中的不可见单元格中删除自定义视图

均匀分布,对齐的水平导航链接:如何删除空白中的垂直空间:内容后