在 Android 上的 SearchView 中添加相机图标

Add camera icon in SearchView on Android

我会试着解释一下,虽然我的英语有点差。

Estoy utilizando MaterialSearchView de Miguel Catalan: MaterialSearchView

我是 Whosebug 的新手,他们不允许我上传图片。我会试着解释一下。我的应用程序的主屏幕在工具栏中有一个 MaterialSearchView。按搜索图标后,我会转到可以搜索的文本框

我想在 SerchView 的 'X' 右侧放置一个相机图标。

有人可以帮助我吗?或者告诉我其他一些搜索组件,可以让您在搜索时在搜索栏中添加图标?

编辑

我找到了解决办法。这不是最专业的方式,但它是有效的。 在 SearchView 控件中,我放了两张图片,一张用于 X 以删除搜索到的文本(原始图标留在相机后面),另一张用于相机(均不可见)。

layout/app_bar_home.xml:

        <com.miguelcatalan.materialsearchview.MaterialSearchView
            android:id="@+id/searchView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            >

            <ImageView android:id="@+id/imgClearSearch"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_gravity="right"
                android:src="@drawable/ic_close_grease_small"
                android:visibility="invisible"
                android:layout_marginTop="18dp"
                android:layout_marginRight="50dp" />

            <ImageView
                android:id="@+id/imgCamera"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_gravity="right"
                android:src="@drawable/ic_menu_camera"
                android:visibility="invisible"
                android:layout_marginTop="14dp"
                android:layout_marginRight="8dp"
                />
        </com.miguelcatalan.materialsearchview.MaterialSearchView>

然后,在java class的监听器中,我们在显示搜索器时显示图像,在隐藏搜索器时隐藏图像。

    //Creamos los listeners de los buscadores
    searchView = (MaterialSearchView) findViewById(R.id.searchView);
    searchView.setVoiceSearch(false);
    searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

            //Cuando pulsamos en buscar
            String aa = "";

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {

            //Cuando teclemamos en el buscador
            String aa = "";

            if (newText.length() > 20)
                searchView.setQuery(newText.substring(0, 20), false);

            return false;
        }
    });
    searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {
        @Override
        public void onSearchViewShown() {

            imgCamera.setVisibility(View.VISIBLE);
            imgClearSearch.setVisibility(View.VISIBLE);

            //ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
            //searchClose.setImageResource(R.drawable.ic_close_white);
            Drawable closeIcon = getResources().getDrawable(R.drawable.ic_close_white);
            searchView.setCloseIcon(closeIcon);

            //Cuando mostramos el buscador
            String aa = "";
        }

        @Override
        public void onSearchViewClosed() {

            //Cuando cerramos el buscador (tras haber buscado)
            String aa = "";
            imgCamera.setVisibility(View.INVISIBLE);
            imgClearSearch.setVisibility(View.INVISIBLE);
        }
    });

唯一的问题是默认显示的用于清除搜索器文本的 X 仍然显示,所以我做了一个小技巧。我用白色的图标替换了默认出现的图标,所以它是不可见的。我已经把它放在线上了:

            Drawable closeIcon = getResources().getDrawable(R.drawable.ic_close_white);
            searchView.setCloseIcon(closeIcon);

Este es el resultado:

好的,那个图标是ImageView,所以你可以使用:

  1. searchView.findViewById(id)(ID 必须进行逆向工程)

  2. searchView.GetChildAt(需要猜的整数位置); (位置应该在1-5之间)

我找到了解决办法。这不是最专业的方式,但它是有效的。 在 SearchView 控件中,我放了两张图片,一张用于 X 以删除搜索到的文本(原始图标留在相机后面),另一张用于相机(均不可见)。

layout/app_bar_home.xml:

        <com.miguelcatalan.materialsearchview.MaterialSearchView
            android:id="@+id/searchView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            >

            <ImageView android:id="@+id/imgClearSearch"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_gravity="right"
                android:src="@drawable/ic_close_grease_small"
                android:visibility="invisible"
                android:layout_marginTop="18dp"
                android:layout_marginRight="50dp" />

            <ImageView
                android:id="@+id/imgCamera"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_gravity="right"
                android:src="@drawable/ic_menu_camera"
                android:visibility="invisible"
                android:layout_marginTop="14dp"
                android:layout_marginRight="8dp"
                />
        </com.miguelcatalan.materialsearchview.MaterialSearchView>

然后,在javaclass的监听器中,我们在显示搜索器时显示图像,在隐藏搜索器时隐藏图像。

    //Creamos los listeners de los buscadores
    searchView = (MaterialSearchView) findViewById(R.id.searchView);
    searchView.setVoiceSearch(false);
    searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

            //Cuando pulsamos en buscar
            String aa = "";

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {

            //Cuando teclemamos en el buscador
            String aa = "";

            if (newText.length() > 20)
                searchView.setQuery(newText.substring(0, 20), false);

            return false;
        }
    });
    searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {
        @Override
        public void onSearchViewShown() {

            imgCamera.setVisibility(View.VISIBLE);
            imgClearSearch.setVisibility(View.VISIBLE);

            //ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
            //searchClose.setImageResource(R.drawable.ic_close_white);
            Drawable closeIcon = getResources().getDrawable(R.drawable.ic_close_white);
            searchView.setCloseIcon(closeIcon);

            //Cuando mostramos el buscador
            String aa = "";
        }

        @Override
        public void onSearchViewClosed() {

            //Cuando cerramos el buscador (tras haber buscado)
            String aa = "";
            imgCamera.setVisibility(View.INVISIBLE);
            imgClearSearch.setVisibility(View.INVISIBLE);
        }
    });

唯一的问题是默认显示的用于清除搜索器文本的 X 仍然显示,所以我做了一个小技巧。我用白色的图标替换了默认出现的图标,所以它是不可见的。我已经把它放在线上了:

            Drawable closeIcon = getResources().getDrawable(R.drawable.ic_close_white);
            searchView.setCloseIcon(closeIcon);

结果是我自己的问题