如何删除始终可见的搜索视图中的空 space?
How to remove empty space in always visible searchview?
我试图在打开我的应用程序并为其提供焦点后立即显示搜索视图,并阻止后退箭头 <-
,因为按后退会导致:
- 首先关闭键盘
- 然后搜索视图折叠,清除查询和显示的结果,导致一个空片段 --- 与其跳过这个,不如直接转到 3,退出activity
- 那么需要第三回才能退出activity
我只想要最多 2 个后退操作来退出 activity。所以我在搜索片段中做了以下操作:
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>
现在,一旦我的 activity 启动并切换到片段,我就会在左侧看到这个空白 space,我该如何摆脱它?
这是AndroidOptionsMenu中的默认空白space,不能修改。如果您的 OptionsMenu 只包含一个 SearchView 项目,有一种方法可以减少它的长度。您不能使用 OptionsMenu,直接将 SearchView 添加到 Toolbar 中。你知道 OptionsMenu 也是基于 Toolbar.
创建的
因此,您可以找到工具栏的xml代码,添加SearchView
如下:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" >
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:text="Search"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</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);
效果:
我试图在打开我的应用程序并为其提供焦点后立即显示搜索视图,并阻止后退箭头 <-
,因为按后退会导致:
- 首先关闭键盘
- 然后搜索视图折叠,清除查询和显示的结果,导致一个空片段 --- 与其跳过这个,不如直接转到 3,退出activity
- 那么需要第三回才能退出activity
我只想要最多 2 个后退操作来退出 activity。所以我在搜索片段中做了以下操作:
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>
现在,一旦我的 activity 启动并切换到片段,我就会在左侧看到这个空白 space,我该如何摆脱它?
这是AndroidOptionsMenu中的默认空白space,不能修改。如果您的 OptionsMenu 只包含一个 SearchView 项目,有一种方法可以减少它的长度。您不能使用 OptionsMenu,直接将 SearchView 添加到 Toolbar 中。你知道 OptionsMenu 也是基于 Toolbar.
创建的因此,您可以找到工具栏的xml代码,添加SearchView
如下:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" >
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:text="Search"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</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);
效果: