Android

时间:2017-09-20 19:27:43

标签: android android-toolbar searchview

我正在尝试了解如何在我的工具栏中在Android中实现SearchView。问题是,根据我选择的配置,我得到不同的界面结果。

这是我的活动的布局:

<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 :(得分:0)

由于我无法看到你实现x按钮功能的其余代码,我只是想捅它。为用户离开搜索视图时添加侦听器,以使用放大镜返回视图。在那个听众中加上这一行:

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

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

答案 1 :(得分:0)

编辑:

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

app: prefixandroid: prefix之间存在差异。使用appcompat-v7库,您可以使用android: prefix并删除app:icon line。

应用程式:showAsAction = “collapseActionView | ifRoom”

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

答案 2 :(得分: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" />

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

    1. 使用Zohra Khan的建议
    2.   

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

      如果不清楚,请查看我提出这些想法的this example

      希望这有助于你