gpt4 book ai didi

安卓操作栏: collapsible SearchView with action button

转载 作者:IT老高 更新时间:2023-10-28 23:14:34 24 4
gpt4 key购买 nike

当搜索 View 展开时,如何使用可折叠的搜索 View 构建 ActionBar 并显示单个操作项?为了更具描述性,这就是我需要的:

enter image description here请注意,还有其他菜单项,android:uiOptions="splitActionBarWhenNarrow" 定义在 AndroidManifest.xml 中。

我尝试设置自定义搜索项布局:

menu.xml

<item
android:id="@+id/menu_search"
android:actionLayout="@layout/actionbar_search"
android:icon="@drawable/action_search"
android:showAsAction="always|collapseActionView"
android:title="@string/search" />

actionbar_search.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="right"
android:orientation="horizontal" >

<com.actionbarsherlock.widget.SearchView
android:id="@+id/search_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:iconifiedByDefault="false"
android:queryHint="@string/search_hint" />

<ImageButton
android:id="@+id/add_item"
android:layout_width="wrap_content"
android:layout_height="match_parent"
style="@style/Widget.Sherlock.ActionButton"
android:src="@drawable/content_new"/>

</LinearLayout>

但默认情况下,搜索 View 会占用所有可用宽度,并且按钮不可见。我不知道如何强制 SearchView 填充应用程序图标和菜单项之间的所有可用空间。我发现的只是 android:maxWidth 属性,但这只允许硬编码维度,我正在寻找一些更灵活的解决方案。我也尝试了 RelativeLayoutandroid:layout_toRightOf="@id/search_view" 没有运气。

最佳答案

在考虑了评论中的建议后,经过多次谷歌搜索和测试,成功获得了预期的效果。我对这个解决方案并不感到自豪,但它很有效,它并不太复杂,对于这种情况应该足够了。

在简历中我做了什么:

  1. ActionBarcustomView 中放置了带有自定义“添加项目”按钮的 SearchView
  2. menu.xml
  3. 的搜索项中移除了 collapseActionViewandroid:actionLayout
  4. 以编程方式折叠/展开 SearchView

一些代码可以更好地理解我做了什么。也许这对某人有用。

menu.xml

<item
android:id="@+id/menu_search"
android:icon="@drawable/action_search"
android:showAsAction="always"
android:title="@string/search" />

// ... other menu items

actionbar_search.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="right"
android:orientation="horizontal">

<com.actionbarsherlock.widget.SearchView
android:id="@+id/search_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:iconifiedByDefault="false"
android:queryHint="@string/search_hint"
android:visibility="invisible" />

<ImageButton
android:id="@+id/add_item"
android:layout_width="wrap_content"
android:layout_height="match_parent"
style="@style/Widget.Sherlock.ActionButton"
android:src="@drawable/content_new"
android:title="@string/add_item" />

</LinearLayout>

MainActivity.java

@Override
public void onCreate(Bundle savedInstanceState) {
// ...
actionBar.setCustomView(R.layout.actionbar_search);
actionBarCustomView = ab.getCustomView();
searchView = ((SearchView) actionBarCustomView.findViewById(R.id.search_view));
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
searchView.setVisibility(View.INVISIBLE);
return false;
}
});
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// ...
case R.id.menu_search:
if (searchView.getVisibility() == View.VISIBLE) {
searchView.setIconified(true);
searchView.setVisibility(View.INVISIBLE);
} else {
searchView.setMaxWidth(abCustomView.getWidth() - addButton.getWidth());
searchView.setVisibility(View.VISIBLE);
searchView.setIconified(false);
}
break;
// ...
}
return true;
}

@Override
public void onBackPressed() {

if (searchView.getVisibility() == View.VISIBLE) {
searchView.setIconified(true);
searchView.setVisibility(View.INVISIBLE);
return;
}

// ...
}

关于安卓操作栏: collapsible SearchView with action button,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15422505/

24 4 0