1.ActionBar中不显示
2.默认图标修改
3.控件的监控
其中最耗时间的就是样式的问题了,后面会详细分析一下.
一.ActionBar中不显示
有两种情况:
1.menu的中xml文件中的设置问题:
- android:id="@+id/action_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_action_icon_search2"
android:showAsAction="always"
android:title="@string/search"/>
注意
这里需要注意android:showAsAction属性,它有五个属性值:
--------------
ifRoom,
collapseActionView,
withText,
never,
always,
--------------
这里如果你的Item不显示,不妨设置为always
然后在Activity的onPrepareOptionsMenu()方法中进行显示or隐藏的判断.
当然屏幕不够了还是会受收到overflow(三个小点)中的.
2.你在styles.xml文件中使用了自定义的ActionBar的style.
这里就需要你去判断你用了哪些属性了,这里就不深究了.
例如:
二.SearchView的获取和设置
这是重点,网上有很多资料,这里我就总结一些我看过后还是遇到的问题.
1.获取实例与初始化绑定事件
在Activity的onCreateOptionsMenu方法中:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater(); //获取Menu的Inflater
menuInflater.inflate(R.menu.main, menu); //inflate你的Item布局
MenuItem action_search = menu.findItem(R.id.action_search); //获取MenuItem的实例,注意,这里获取的不是SearchView的实例.
action_search.setVisible(false); //设置Item是否可见,这里与View的设置不太一样,接受的是boolean值,只有两种状态
searchViewInit(menu);//自定义的一个初始化SearchView的方法
return true;
}
/**
* SearchView的初始化
*/
private void searchViewInit(Menu menu) {
//这里需要用到SearchView的布局文件[1],文章结尾有github的链接
//用MenuItem的`getActionView()`方法获取`android:actionViewClass`说对应的实例,这里是`android.widget.SearchView`
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSubmitButtonEnabled(true);//是否显示确认搜索按钮
searchView.setIconifiedByDefault(false);//设置展开后图标的样式,这里只有两种,一种图标在搜索框外,一种在搜索框内
searchView.setIconified(false);//设置
searchView.clearFocus();//清除焦点
/*
这里是重点,SearchView并没有提供样式的修改方法,所以只能
1.用获取到的实例调用getContext()方法,返回当前view的上下文
2.调用getResources()方法,获取该view的资源实例(Return a Resources instance)
3.调用getIdentifier()方法,获取相同名字的ID,(Return a resource identifier for the given resource name)
4.通过findViewById()获取该ID的实例,然后就可以做相应的操作了
*/
int search_mag_icon_id = searchView.getContext().getResources().getIdentifier("android:id/search_mag_icon", null, null);
ImageView search_mag_icon = (ImageView)searchView.findViewById(search_mag_icon_id);//获取搜索图标
search_mag_icon.setImageResource(R.drawable.ic_action_icon_search2);//图标都是用src的
//设置提示文字的颜色,这里走了点奇招,用Html类方法
searchView.setQueryHint(Html.fromHtml("" + getResources().getString(R.string.search_input) + ""));
//设置搜索事件的监控
searchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
//当点击搜索按钮,输入法搜索按钮,会触发这个方法.在这里做相应的搜索事件,query为用户输入的值
//当输入框为空或者""时,此方法没有被调用
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
//当输入的文字发生变化的时候,会触发这个方法.在这里做匹配提示的操作等
return true;
}
});
//如果希望SearchView一直处理展开状态,可以实现它的OnCloseListener方法
//返回true,截取关闭事件,不让搜索框收起来
searchView.setOnCloseListener(new OnCloseListener() {
@Override
public boolean onClose() {
return true;
}
});
}
三.SearchView样式的修改
这是我最头疼的地方,我想修改item中的这个图标
在XML中设置icon并不能修改SearchView的搜索图标:
- android:id="@+id/action_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_action_icon_search2"
android:showAsAction="always"
android:title="@string/search"/>