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

时间:2017-11-03 13:24:51

标签: android icons searchview

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

Estoy utilizando MaterialSearchView de Miguel Catalan:MaterialSearchView

我是StackOverflow的新手,他们不允许我上传图片。我会试着解释一下。我的应用程序的主屏幕在工具栏中有一个MaterialSearchView。按下搜索图标后,它会转到您可以搜索的文本框中 我想把一个相机图标放在SerchView的'X'右边。

enter image description here

enter image description here

任何人都可以帮助我吗?或者告诉我一些其他搜索组件,它们允许您在搜索时在搜索栏中添加图标?

修改

我有解决方案。它不是最专业的方式,但它是有效的。 在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类中,在监听器中,我们在显示搜索器时显示图像,并在隐藏搜索器时隐藏它们。

    //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:

enter image description here

2 个答案:

答案 0 :(得分:0)

好的,该图标是ImageView,因此您可以使用:

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

  2. searchView.GetChildAt(您需要猜测的int位置); (位置应介于1-5之间)

答案 1 :(得分:0)

我有解决方案。它不是最专业的方式,但它是有效的。 在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类中,在监听器中,我们在显示搜索器时显示图像,并在隐藏搜索器时隐藏它们。

    //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);

导致我自己的问题