Actionbar之SearchView

1
2
3
4
5
6
7
<item
android:id="@+id/menu_search"
android:actionLayout="@layout/searchview"//自定义
android:icon="@drawable/ic_action_search"
android:showAsAction="always|collapseActionView"
android:title="Search"/>
android:actionViewClass="android.widget.SearchView"//系统的

我们设定 showAsAction这个属性的时候,加了collapseActionView这么一个参数,它的意思是说,将item引用的布局隐藏起来,当你点击该item的时候,再将其展现出来。通过这个属性,我们就可以将每个item复杂的布局隐藏起来,从而有效的节约了actionbar的布局空间。

searchview.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/search"
style="@android:style/Widget.Holo.EditText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="搜索视频"
android:imeOptions="actionSearch"
android:singleLine="true"
android:textColor="@android:color/black"
android:textCursorDrawable="@null" />
</LinearLayout>

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
initSearch(menu);
return true;
}
private VideoFragment videoFragment;
/**
* 搜索动作
*
* @param menu
*/
private void initSearch(Menu menu) {
MenuItem item = menu.findItem(R.id.menu_search);
View view = item.getActionView();
final EditText search = (EditText) view.findViewById(R.id.search);
MenuItemCompat.setOnActionExpandListener(item,
new OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Toast.makeText(MainDrawerActivity.this, "啊哦,我隐藏起来了!",
// Toast.LENGTH_SHORT).show();
search.clearFocus(); // 清除焦点
AppUtil.hideSoftInput(MainDrawerActivity.this);
if (search.getText().length() > 0) {// 重新恢复搜索之前的数据
videoFragment.searchVideoTable(false, "");//
}
return true;
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Toast.makeText(MainDrawerActivity.this, "啦啦啦,我出现喽!",
// Toast.LENGTH_SHORT).show();
search.requestFocus(); // 请求获取焦点
/**
* 调起软键盘
*/
InputMethodManager m = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
return true;
}
});
search.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
if (search.getText().length() > 0) {// 搜索
AppUtil.hideSoftInput(MainDrawerActivity.this);
videoFragment.searchVideoTable(true, search.getText()
.toString());
}
return true;
}
return false;
}
});
}
  • 参考

Android ActionBar 的其它用法(搜索、分享、隐藏复杂布局,模仿Google Play,微信)

Android在EditText中开启软键盘的"Done"按钮

输入法软键盘显示/隐藏的监听和控制

修改Android EditText光标颜色

Android:自定义输入框光标颜色



联系作者

我的微信公众号:吴小龙同学,欢迎关注交流,公号回复关键字「1024」有惊喜哦。