【问题标题】:SearchView icons are not showing in AndroidSearchView 图标未在 Android 中显示
【发布时间】:2018-03-02 00:04:00
【问题描述】:

我正在尝试了解如何在我的工具栏中的 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>

这是我的工具栏阴影布局:

<?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>

通过这个配置,我得到这个输出:

但如果我点击放大镜,我会看到:

如果我开始输入,我会得到:

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

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

这是我正在寻找的正确输出,但我不知道为什么放大镜没有显示。

这是我初始化搜索视图的活动部分:

@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();
                }
            });
        }
    }

【问题讨论】:

    标签: android android-toolbar searchview


    【解决方案1】:

    由于我看不到您在其中实现 x 按钮功能的其余代码,因此我将对其进行尝试。当用户离开搜索视图以返回到带有放大镜的视图时,添加一个侦听器。在该侦听器中添加以下行:

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

    搜索视图可能会自动将视图设置为不可见,但您永远不会重置用户的可见性。

    【讨论】:

    • 感谢您的回答!不幸的是,我尝试将可见性设置为可见,但没有奏效。
    【解决方案2】:

    编辑:

    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" 在 searchview 中,如果我们仅选择 always 作为 showasAction,则后退箭头不可见。

    【讨论】:

    • 感谢您的回答!如果我按照您的建议进行更改,则会出现放大镜,但是当我单击它时,“x”按钮和后退按钮都会消失。
    • @MarcosGuimaraes 是否将 U 更改为 always|collapseActionView,因为即使我只使用 always 选项也遇到了同样的问题,但是当我更改为 always|collapseActionView 时,一切正常。
    • 是的,我做到了,但我仍然得到相同的输出。
    • 我删除了应用程序行并更改为:always|collapseActionView 但放大镜仍然以某种方式隐藏。
    • @Marcos 我认为工具栏正在覆盖它。此活动是父活动还是任何 X 活动正在启动它。
    【解决方案3】:

    检查您应用的主题和样式,因为我遇到了与您相同的问题,这让我抓狂。

    我找到了更改主题和样式的解决方案。

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

      &lt;style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"&gt;

    2. 对于 AppBarLayout 使用这个

      &lt;style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark" /&gt;

    3. 工具栏使用这个

      &lt;style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /&gt;

    请注意,一个是Dark,另一个是Light。如果它更好地适应你的主题,你可以交换两者

    1. 使用 Zohra Khan 的建议

    将此行更改为 app:showAsAction="always|collapseActionView" 在 searchview 中,如果我们仅选择 always 作为 showasAction,则后退箭头不可见。

    如果不清楚,请查看 this example 我从哪里获得这些想法

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2014-12-15
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 2021-08-18
      • 1970-01-01
      相关资源
      最近更新 更多