在安卓中,SearchView图标未显示

3
我正在尝试理解如何在Android中在我的工具栏中实现SearchView。问题在于,根据我选择的配置,我会得到不同的界面结果。
这是我的Activity的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    tools:context="com.construct.v2.activities.teams.ActivityTeams"
    android:background="#ffffff"
    android:id="@+id/relativeLayout">

    <include android:id="@+id/toolbar" layout="@layout/toolbar_shadow"/>

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@+id/toolbar" />

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar">

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ffffff"
            app:tabMode="fixed"
            app:tabGravity="fill"
            app:tabIndicatorColor="#125688"/>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"  />
</RelativeLayout>

这是我的toolbar_shadow布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/PopupMenuStyle"
    android:id="@+id/my_awesome_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/actionBarSize"
    app:titleTextColor="@android:color/black"
    android:layout_alignParentTop="true"
    android:gravity="right"
    android:elevation="5dp">
  <TextView
      android:id="@+id/delete"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="@dimen/s_text_size"
      android:padding="@dimen/small_margin"
      android:layout_gravity="right|end"
      android:layout_marginEnd="@dimen/s_margin"
      android:textColor="#000000"
      android:text="@string/edit"/>
</android.support.v7.widget.Toolbar>

这是我的搜索项的布局文件:
<?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/search"
        android:title="@string/search"
        app:icon="@drawable/ic_search_black_24dp"
        android:icon="@drawable/ic_search_black_24dp"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

使用此配置,我得到了以下输出:

enter image description here

但是如果我点击放大镜,就会出现这个:

enter image description here

如果我开始打字,我会得到这个:

enter image description here

所以我认为是因为我有这个配置 app:showAsAction="collapseActionView|ifRoom",但我尝试更改为 always,但我得到了这个输出:

enter image description here

放大镜消失了。但如果我点击它应该在的位置,我会得到这个输出:

enter image description here

“这是我想要的正确输出,但我不知道为什么放大镜没有显示出来。”
“这是我活动中初始化搜索视图的部分:”
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_search_team, menu);

    SearchManager searchManager = (SearchManager)
            getSystemService(Context.SEARCH_SERVICE);
    searchMenuItem = menu.findItem(R.id.search);
    searchView = (SearchView) searchMenuItem.getActionView();

    ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
    searchClose.setImageResource(R.drawable.ic_action_cancel_black);

    for (TextView textView : findChildrenByClass(searchView, TextView.class)) {
        textView.setTextColor(Color.BLACK);
        textView.setHintTextColor(Color.BLACK);
    }

    searchView.setSearchableInfo(searchManager.
            getSearchableInfo(getComponentName()));
    searchView.setSubmitButtonEnabled(true);
    searchView.setOnQueryTextListener(this);

    return true;
}

这是我初始化工具栏的方法:
@Override
    protected void initToolbar() {
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        if(toolbar!=null) {
            if (user_type == 1) {
                toolbar.setTitle(R.string.collaborators_title);
            } else if (user_type == 2) {
                toolbar.setTitle(R.string.admin_title);
            }
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            toolbar.setNavigationIcon(R.drawable.ic_action_back_black);
            //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            //toolbar.setTitle("Teste");
            //toolbar.setTitleTextColor(Color.parseColor("#000000"));
            //final TextView edit = (TextView) findViewById(R.id.delete);
            //edit.setText(" ");

            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    onBackPressed();
                }
            });
        }
    }
3个回答

0

由于我无法看到您实现“x”按钮功能的其余代码,所以我只能猜测一下。为用户离开搜索视图返回带有放大镜的视图添加一个监听器。在该监听器中添加以下代码:

<Your activity>.findViewById(R.id.search).setVisibility(View.VISIBLE);

可能的情况是,搜索视图自动将视图设置为不可见,但您从未为用户重置可见性。

谢谢你的回答!不幸的是,我尝试将可见性设置为可见,但没有起作用。 - undefined

0

编辑:

app:icon="@drawable/ic_search_black_24dp"
android:icon="@drawable/ic_search_black_24dp" 

在编程中,app: prefixandroid: prefix之间有区别。使用appcompat-v7库,您可以使用android: prefix并删除app:icon行。

app:showAsAction="collapseActionView|ifRoom"

将此行更改为
app:showAsAction="always|collapseActionView" 在搜索视图中,如果我们仅选择always作为showasAction,则返回箭头不可见。


是的,我试过了,但是我仍然得到相同的输出结果。 - undefined
我删除了应用程序行并更改为:always|collapseActionView,但放大镜仍然以某种方式隐藏。 - undefined
@Marcos 我认为工具栏正在覆盖它。这个活动是父活动还是任何 X 活动启动它。 - undefined
抱歉,我有点困惑。如果我按照您的建议修改我的代码,放大镜会出现。但是返回按钮和“x”按钮消失了。实际上,只有在我开始在搜索框中输入时,“x”按钮才会出现。但是返回按钮已经消失了。 - undefined
尝试对这两行代码进行注释: ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); searchClose.setImageResource(R.drawable.ic_action_cancel_black); 只有在开始输入时,右侧才会出现X按钮。这是期望的行为。你甚至可以在WhatsApp上检查搜索行为。 - undefined
显示剩余4条评论

0

检查你的应用程序的主题和样式,因为我曾经遇到过与你相同的问题,让我疯狂。

我找到了解决方案,改变了主题和样式。

  1. 如果你正在使用工具栏,我假设你的主题是

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

  2. 对于AppBarLayout,请使用以下内容

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark" />

  3. 对于工具栏,请使用以下内容

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

请注意,一个是Dark,另一个是Light。如果更适合你的主题,可以互换两者。

  1. 使用Zohra Khan的建议
将此行更改为app:showAsAction="always|collapseActionView"。如果我们在searchview中仅选择always作为showasAction,那么返回箭头将不可见。
如果不清楚,请查看我从中获取这些想法的this example
希望对您有所帮助。

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