`
xuanzhui
  • 浏览: 197360 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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圆角和添加取消按钮


 

<LinearLayout
	android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/lightGreyBg">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginTop="6dp"
        android:layout_marginBottom="6dp">

        <android.support.v7.widget.SearchView
            android:id="@+id/searchView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/white_bg_round_radius_4dp"/>

        <TextView
            android:id="@+id/cancelView"
            android:layout_width="45dp"
            android:layout_height="30dp"
            android:text="取消"
            android:textColor="@color/colorPrimary"
            android:textSize="@dimen/font_size_common"
            android:layout_gravity="end"
            android:gravity="center"
            android:visibility="gone"/>
    </FrameLayout>

</LinearLayout>

 再根据输入框是否处于编辑状态动态修改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. 添加搜索下拉框,同时添加透明蒙版的效果


 在SearchView下添加显示区域

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 蒙版 -->
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#80323232"
        />

    <ListView
        android:id="@+id/matchListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@null"
        android:background="@android:color/white"/>

</FrameLayout>

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

 

 

 

 

 

 

  • 大小: 26.3 KB
  • 大小: 28 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics