Android SearchView相关细节

阅读更多

以下所有内容都是针对android.support.v7.widget.SearchView,相比于默认的SearchView拥有更多的可配置性。

 

1. SearchView默认的状态是一个搜索图标,点一下才会展开输入框,如果想默认处于展开状态,可以调用如下方法:

searchView.setIconifiedByDefault(false);

 带来的副作用是此时的SearchView处于 focus 状态,软键盘会自动打开,如果不希望SearchView自动获得焦点,可以调用如下的方法:

searchView.setFocusable(false);
searchView.clearFocus();

 setFocusable(false)在初始化SearchView的时候是必须的

 

2. 获取SearchView输入框

SearchView.SearchAutoComplete searchTextArea = (SearchView.SearchAutoComplete) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);

 之后就可以通过 searchTextArea 对字体、文本等属性进行修改,比如修改字体大小

searchTextArea.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);

 

3. 获取输入框底部线条

View v = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);

 如果希望底部线条看不来,可以设置它的背景色和SearchView保持一致,例如:

v.setBackgroundColor(Color.WHITE);

 

4. 模拟iOS圆角和添加取消按钮


 



    

        

        
    


 再根据输入框是否处于编辑状态动态修改SearchView的margin和取消按钮的可见性

FrameLayout.LayoutParams rightMargin = new FrameLayout.LayoutParams(
        FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
rightMargin.setMarginEnd((int) DisplayUtils.dp2px(this, 45));

FrameLayout.LayoutParams zeroMargin = new FrameLayout.LayoutParams(
        FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
zeroMargin.setMarginEnd(0);

searchView.setOnQueryTextFocusChangeListener((view, hasFocus) -> {
    if (hasFocus) {
        searchView.setLayoutParams(rightMargin);
        cancelView.setVisibility(View.VISIBLE);
    } else {
        searchView.setLayoutParams(zeroMargin);
        cancelView.setVisibility(View.GONE);
    }
});

 同时可以对取消按钮添加监听,通过如下示例恢复SearchView的原始状态

searchTextArea.setText("");
searchView.clearFocus();

 

5. 添加搜索下拉框,同时添加透明蒙版的效果

Android SearchView相关细节_第1张图片
 在SearchView下添加显示区域



    
    

    

 实现SearchView.OnQueryTextListener,在两个方法中动态更新ListView内容

 

 

 

 

 

 

  • Android SearchView相关细节_第2张图片
  • 大小: 26.3 KB
  • Android SearchView相关细节_第3张图片
  • 大小: 28 KB
  • 查看图片附件

你可能感兴趣的:(searchview)