【问题标题】:How to add Icon in hint of EditText如何在 EditText 的提示中添加图标
【发布时间】:2018-02-15 19:32:18
【问题描述】:

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

请查看以下截图:

【问题讨论】:

  • 您可以在 RelativeLayout 中使用 EdittextImageView 并在用户点击 EditText 时隐藏图像

标签: android menu android-edittext searchview hint


【解决方案1】:

在 xml 中添加到您的 EditText:android:drwableLeft="@drawable/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);
    }
}

这应该可以解决问题

【讨论】:

    【解决方案2】:

    创建菜单:

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

    添加提示只需在您的菜单中使用hint 属性

    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint" >
    

    更多信息请阅读bolg

    在 Menifest.xml 中

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

    欲了解更多信息如何Creating a Search Interface

    在jave中

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

    【讨论】:

      【解决方案3】:

      请使用 Spannable 字符串和 ImageSpan 在编辑文本中添加图标作为提示

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

      【讨论】:

        【解决方案4】:

        drawableLeft 设置为您的edittext 喜欢

        android:drawableLeft="@drawable/fi_search"
        

        当在你的editText 中输入一些文本时隐藏它并且当没有输入任何内容时可见

        喜欢

        csSearchTxt.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        
                    }
        
                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {
        
                        if(s.length() == 0) {
                            csSearchTxt.setCompoundDrawablesWithIntrinsicBounds(R.drawable.fi_search, 0, 0, 0);
                        }
                        else
                        {
                            csSearchTxt.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
                        }
        
        
                    }
        
                    @Override
                    public void afterTextChanged(Editable s) {
        
        
                    }
                });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-22
          • 2016-06-22
          • 2011-04-11
          • 2017-01-26
          相关资源
          最近更新 更多