关于SearchView的一些小细节
来源:互联网 发布:excel数据导入系统 编辑:程序博客网 时间:2024/04/30 11:34
1.ActionBar中不显示
2.默认图标修改
3.控件的监控
其中最耗时间的就是样式的问题了,后面会详细分析一下.
一.ActionBar中不显示
有两种情况:
1.menu的中xml文件中的设置问题:
<item
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.
这里就需要你去判断你用了哪些属性了,这里就不深究了.
例如:
<resources>
<style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#f4842d</item>
</style>
</resources>
二.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("<font color = #999999>" + getResources().getString(R.string.search_input) + "</font>"));
//设置搜索事件的监控
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的搜索图标:
<item
android:id="@+id/action_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_action_icon_search2"
android:showAsAction="always"
android:title="@string/search"/>
2.默认图标修改
3.控件的监控
其中最耗时间的就是样式的问题了,后面会详细分析一下.
一.ActionBar中不显示
有两种情况:
1.menu的中xml文件中的设置问题:
<item
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.
这里就需要你去判断你用了哪些属性了,这里就不深究了.
例如:
<resources>
<style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#f4842d</item>
</style>
</resources>
二.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("<font color = #999999>" + getResources().getString(R.string.search_input) + "</font>"));
//设置搜索事件的监控
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的搜索图标:
<item
android:id="@+id/action_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_action_icon_search2"
android:showAsAction="always"
android:title="@string/search"/>
0 0
- 关于SearchView的一些小细节
- 关于SearchView的一些小细节
- 关于SearchView的一些小细节
- SearchView的小细节
- 关于.net类的一些小细节
- 关于QPushButton的一些小细节
- 关于线程的一些小细节
- 关于NSHTTPCookie设置的一些小细节
- 关于懒加载的一些小细节
- 关于sizeof的一些小细节
- 关于c->c++过渡的一些小细节
- mysql中关于order by的一些小细节
- 关于JS操作DOM的一些小细节
- 关于数组指针,字符串指针的一些小细节
- 一些关于android控件布局的小细节记录
- c++ 学习笔记 -- 关于cout的一些小细节
- 关于Bugly热更新sdk使用的一些小细节
- 关于java中编码的一些小细节
- 路线
- win7 64位系统下VS 2010 opencv2.4.9配置
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- ThinkPHP验证码制作
- 【JavaWeb】 ServletConfig
- 关于SearchView的一些小细节
- 通过项目中定位的一个问题:学习ionic框架$ionicPopover的使用以及注意事项
- Mysql分库分表方案
- Android onMeasure and onLayout
- 关于ThinkPHP中$this->redirect的疑问。
- android bitmap compress(图片压缩)
- perl DBI mysql包安装详解
- 剑指offer系列之五十七:二叉树的下一个节点
- 实现统计每个栏目下的文章总数的调用