Android 如何在EditText提示中添加图标

Android 如何在EditText提示中添加图标,android,menu,android-edittext,searchview,hint,Android,Menu,Android Edittext,Searchview,Hint,我想在EditText提示中添加搜索图标。 实际上,我正在使用与SearchView相同的EditText,因为我想在EditText之间设置一个搜索图标,当用户在EditText中写入与提示文本相同的内容时,搜索图标将消失 请检查以下屏幕截图: 创建菜单: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xml

我想在EditText提示中添加搜索图标。 实际上,我正在使用与SearchView相同的EditText,因为我想在EditText之间设置一个搜索图标,当用户在EditText中写入与提示文本相同的内容时,搜索图标将消失

请检查以下屏幕截图:


创建菜单:

<?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/menu_search_album"
        android:icon="@drawable/ic_search"
        android:title="@string/str_search_album"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="collapseActionView|always" />

</menu>

要了解更多信息,请阅读此

在Menifest.xml中

<meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />

有关如何

在哈韦

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_photos_activity, menu);

        final MenuItem item = menu.findItem(R.id.menu_search_photos);
        final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
        searchView.setOnQueryTextListener(this);

        return true;

    }

@Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        List<MyAlbumItemPojo.DataFields> filteredModelList = filter(arrDataFields, newText);
        if (filteredModelList.size() > 0) {
            tvDataNotFoundAlbumItem.setVisibility(View.GONE);
            return true;
        } else {
            tvDataNotFoundAlbumItem.setVisibility(View.VISIBLE);
            tvDataNotFoundAlbumItem.setText(R.string.str_photo_not_fund);
            return false;
        }
    }

    private List<MyAlbumItemPojo.DataFields> filter(List<MyAlbumItemPojo.DataFields> models, String query) {
        query = query.toLowerCase();

        final List<MyAlbumItemPojo.DataFields> filteredModelList = new ArrayList<>();

        for (MyAlbumItemPojo.DataFields model : models) {
            final String text = model.getImagename().toLowerCase().toString();
            if (text.contains(query)) {
                filteredModelList.add(model);

            }
        }

        if (!query.toString().toString().trim().equals("")){
            adapter = new MyAlbumAdapter(MyAlbumsActivity.this, (ArrayList<MyAlbumItemPojo.DataFields>) filteredModelList,VisitUserID,VisitUser);
            recyclerViewMyAlbums.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }else {
            adapter = new MyAlbumAdapter(MyAlbumsActivity.this, arrDataFields,VisitUserID,VisitUser);
            recyclerViewMyAlbums.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }

        return filteredModelList;
    }
@覆盖
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.menu\u照片\u活动,菜单);
最终菜单项=menu.findItem(R.id.menu\u搜索\u照片);
最终搜索视图SearchView=(SearchView)MenuItemCompat.getActionView(项);
setOnQueryTextListener(这个);
返回true;
}
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
返回false;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
List filteredModelList=filter(arrDataFields,newText);
如果(filteredModelList.size()>0){
tvDataNotFoundAlbumItem.setVisibility(View.GONE);
返回true;
}否则{
tvDataNotFoundAlbumItem.setVisibility(View.VISIBLE);
tvDataNotFoundAlbumItem.setText(R.string.str_photo_not_fund);
返回false;
}
}
私有列表筛选器(列表模型、字符串查询){
query=query.toLowerCase();
final List filteredModelList=new ArrayList();
对于(MyAlbumItemPojo.DataFields模型:模型){
最终字符串text=model.getImagename().toLowerCase().toString();
if(text.contains(查询)){
filteredModelList.add(model);
}
}
如果(!query.toString().toString().trim()等于(“”){
adapter=新的MyAlbumAdapter(MyAlbumsActivity.this,(ArrayList)FilteredModelist、VisitUserID、VisitUser);
RecycleServicewMyalBums.setAdapter(适配器);
adapter.notifyDataSetChanged();
}否则{
adapter=新的MyAlbumAdapter(MyAlbumsActivity.this、arrDataFields、VisitUserID、VisitUser);
RecycleServicewMyalBums.setAdapter(适配器);
adapter.notifyDataSetChanged();
}
返回filteredModelList;
}

drawableLeft
设置为您的
edittext
格式

android:drawableLeft="@drawable/fi_search"
当在
editText
中键入某些文本时,隐藏它,当其中未输入任何内容时,可见


请使用Spannable字符串和ImageSpan在edittext中添加图标作为提示

 ImageSpan imageHint = new ImageSpan(this, R.drawable.ic_search_accent_24dp);
            String blankString = "     ";
            SpannableString spannableString = new SpannableString(blankString);
            spannableString.setSpan(imageHint, 0, blankString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            searchEdit.setHint(spannableString);

在xml中添加到编辑文本:
android:drwableLeft=“@dravable/imageSearch”

这会在EditText中放入一个图像,但在键入文本后图像仍然存在。 要使图像消失,只需在活动中覆盖:

@Override
public void afterTextChanged(Editable editable) {
    if(editable.toString().length() > 0) {
        searchEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
    } else {            
        searchEditText.setCompoundDrawablesWithIntrinsicBounds(R.drawable.image, 0, 0, 0);
    }
}
这应该可以做到

您可以在RelativeLayout中使用Edittext和ImageView,并在用户点击Edittext时隐藏图像
 ImageSpan imageHint = new ImageSpan(this, R.drawable.ic_search_accent_24dp);
            String blankString = "     ";
            SpannableString spannableString = new SpannableString(blankString);
            spannableString.setSpan(imageHint, 0, blankString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            searchEdit.setHint(spannableString);
@Override
public void afterTextChanged(Editable editable) {
    if(editable.toString().length() > 0) {
        searchEditText.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
    } else {            
        searchEditText.setCompoundDrawablesWithIntrinsicBounds(R.drawable.image, 0, 0, 0);
    }
}