【问题标题】:How to disable Search bar type hint如何禁用搜索栏类型提示
【发布时间】:2013-04-29 14:10:26
【问题描述】:

我有一些用于 editText 搜索过滤器的代码

EditText searchView = (EditText) findViewById(R.id.search_view_edit);
searchView.setVisibility(View.VISIBLE);
`list.setTextFilterEnabled(true);`          

searchView.setHint( getResources().getString( R.string.search_friend_hint ) );
searchView.addTextChangedListener( new TextWatcher() {

   @Override
  public void onTextChanged( CharSequence s, int start,int before, int count ) {

   Log.d("abc123", "onTextChanged " + s.toString() );
       if (TextUtils.isEmpty( s )) {
        list.clearTextFilter();
       } else {
    list.setFilterText( s.toString() );
       }
  }                     
  @Override
  public void beforeTextChanged( CharSequence s, int start, int count, int after ) {}

  @Override
  public void afterTextChanged( Editable s ) {}
});

但默认情况下会显示输入提示:

如何禁用提示?

【问题讨论】:

  • 嗯,我不太确定,你的意思是什么。您在第 4 行明确设置了提示:“searchView.setHint(...);”。如果您不想显示提示,请将其设置为 ("")。
  • 不,我不是这个意思,我想禁用前景“a”
  • 当您不输入任何内容时,此行用于在 editText 中设置提示 searchView.setHint( getResources().getString( R.string.search_friend_hint ) );
  • “a”周围有黑色透明矩形?

标签: android filter android-edittext


【解决方案1】:

提示不是由EditText 显示,而是由ListView 显示结果。正如this answer 建议的那样,要禁用此工具提示/Toast,请避免使用setTextFilterEnabled(true)setFilterText。而是直接使用getAdapter().getFilter().filter

EditText searchView = (EditText) findViewById(R.id.search_view_edit);
searchView.setVisibility(View.VISIBLE);
//DON'T list.setTextFilterEnabled(true);

searchView.setHint( getResources().getString( R.string.search_friend_hint ) );
searchView.addTextChangedListener( new TextWatcher() {

   @Override
   public void onTextChanged( CharSequence s, int start,int before, int count ) {

       Log.d("abc123", "onTextChanged " + s.toString() );
       list.getAdapter().getFilter().filter(s);
   }                     
   @Override
   public void beforeTextChanged( CharSequence s, int start, int count, int after ) {}

   @Override
   public void afterTextChanged( Editable s ) {}
});

另外,为了更好的用户体验,考虑使用SearchViewonQueryTextChange 而不是EditTextonTextChanged

【讨论】:

    【解决方案2】:

    hlidka 的答案需要更正和类转换为 Filterable:

    TextWatcher tw = 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) {
                final LinearLayout sf=(LinearLayout) findViewById(R.id.searchFilter);
                final LinearLayout sr=(LinearLayout) findViewById(R.id.searchResultLayout);
                if (TextUtils.isEmpty(s)) {
                    mListView.clearTextFilter();
                } else {
                      ((Filterable)mListView.getAdapter()).getFilter().filter(s);
                    //following line was causing the ugly popup window.
                    //mListView.setFilterText(s.toString());
                }
                officeSearchAdapter.notifyDataSetChanged();
            }
    
            @Override
            public void afterTextChanged(Editable s) {
    
            }
        };
    

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多