自定义searchview的编辑框,搜索按钮,删除按钮,光标等

多说无益,直接上代码。
<pre name="code" class="java"><span style="white-space:pre">	</span>   Class<?> argClass=mSearchView.getClass();
            //指定某个私有属性
            Field mSearchHintIconField = argClass.getDeclaredField("mSearchHintIcon");
            mSearchHintIconField.setAccessible(true);
            ImageView mSearchHintIcon = (ImageView)mSearchHintIconField.get(mSearchView);
//            mSearchHintIcon.setVisibility(View.GONE);
            mSearchHintIcon.setImageResource(R.drawable.main_search_selector);

            //注意mSearchPlate的背景是stateListDrawable(不同状态不同的图片)  所以不能用BitmapDrawable
            Field ownField = argClass.getDeclaredField("mSearchPlate");
            //setAccessible 它是用来设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问,默认为false
            ownField.setAccessible(true);
            View mView = (View) ownField.get(mSearchView);
            mView.setBackground(getResources().getDrawable(R.drawable.person_edittext_selector));

<pre name="code" class="java"> <span style="white-space:pre">	</span>    //修改关闭图标
            Field mCloseButton = argClass.getDeclaredField("mCloseButton");
            mCloseButton.setAccessible(true);
            ImageView backView = (ImageView) mCloseButton.get(mSearchView);
            backView.setImageResource(R.drawable.delete_selector);

            //修改为展开时的搜索图标
            Field mSearchButton = argClass.getDeclaredField("mSearchButton");
            mSearchButton.setAccessible(true);
            ImageView search = (ImageView) mSearchButton.get(mSearchView);
            search.setImageResource(R.drawable.main_search_selector);

            //修改光标
            //指定某个私有属性
            Field mQueryTextView = argClass.getDeclaredField("mQueryTextView");
            mQueryTextView.setAccessible(true);
            Class<?> mTextViewClass = mQueryTextView.get(mSearchView).getClass().getSuperclass().getSuperclass().getSuperclass();
            //mCursorDrawableRes光标图片Id的属性 这个属性是TextView的属性,所以要用mQueryTextView(SearchAutoComplete)
            //的父类(AutoCompleteTextView)的父  类( EditText)的父类(TextView)
            Field mCursorDrawableRes = mTextViewClass.getDeclaredField("mCursorDrawableRes");
            //setAccessible 它是用来设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问,默认为false
            mCursorDrawableRes.setAccessible(true);
            //注意第一个参数持有这个属性(mQueryTextView)的对象(mSearchView) 光标必须是一张图片不能是颜色,因为光标有两张图片,
            //一张是第一次获得焦点的时候的闪烁的图片,一张是后边有内容时候的图片,如果用颜色填充的话,就会失去闪烁的那张图片,
            //颜色填充的会缩短文字和光标的距离(某些字母会背光标覆盖一部分)。
            mCursorDrawableRes.set(mQueryTextView.get(mSearchView), R.drawable.divider_selector);  


自定义searchview的编辑框,搜索按钮,删除按钮,光标等,布布扣,bubuko.com

时间: 2024-10-12 11:14:40

自定义searchview的编辑框,搜索按钮,删除按钮,光标等的相关文章

第6章、编辑框EditText与按钮Button(从零开始学Android)

在一个应用中,登录是经常使用的,下面我们学习一下如何开发一个登录窗口.我们需要学习Android中的基本控件:(1)EditText编辑框.(2)Button按钮. 一.设计登录窗口 打开"res/layout/activity_main.xml"文件. 1.分别从工具栏向activity拖出2个EditText(来自Text Fields).1个按钮(来自Form Widgets). 2.打开activity_main.xml文件. 代码自动生成如下:注意①和②虽同为EditText

一个简单的记事本编辑框的实现以及搜集的一些窗口风格的预定义

这是一个简单的记事本的窗口过程 1 WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 2 3 LOCAL winRect:RECT 4 LOCAL editWidth:DWORD 5 LOCAL editHeight:DWORD 6 7 .IF uMsg==WM_DESTROY 8 invoke PostQuitMessage,NULL 9 .ELSEIF uMsg==WM_CREATE 10 ;创建一个编辑框 11

IOS开发——UI进阶篇(四)全局刷新,局部刷新,左滑操作,左滑出现更多按钮,进入编辑模式,批量删除,自定义批量删除

首先创建项目,在storyboard如下布局控件,设置好约束 然后创建cell模型类XMGWineCell数据模型类XMGWine创建UITableView,设置数据源协议,实现数据源方法懒加载数据这些在前面已经做过很多次了,代码就不一一写了 一.全局刷新 1.添加单组数据并全局刷新 - (IBAction)add { // 添加模型数据 XMGWine *wine = [[XMGWine alloc] init]; wine.money = @"20.5"; wine.name =

线性布局中按钮在编辑框右边的布局方法

<LinearLayout android:id="@+id/pop_footprint_comment" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true&quo

自定义tableViewCell的侧滑删除按钮

有时候客户会有一些特殊的要求,更改tableViewCell的侧滑删除按钮的样子就是其中之一,就像这样: 这个效果其实也不难,只需在自定义的cell里重写layoutSubviews方法就好,具体代码如下: //修改删除模式的样式 -(void)layoutSubviews { [super layoutSubviews]; for (UIView *subView in self.subviews) { if([subView isKindOfClass:NSClassFromString(@

MFC通过按钮控制编辑框是否显示系统时间

在dlg.h中public bool flag; 在构造函数中 flag=false; 在按钮的生成函数中 if(flag) { flag=false; //m_showtime.SetWindowText(_T("")); GetDlgItem(IDC_ShowTime)->SetWindowTextW(_T(""));   //IDC_ShowTime为编辑框ID } else { CTime time = CTime::GetCurrentTime();

MFC通过按钮控制编辑框是否显示系统时间(动态显示)

1.在dlg.h中public bool flag; static UINT time(void *param); 2.在构造函数中 flag=false; 3.在按钮的生成函数中 if(flag) { flag=false; //GetDlgItem(IDC_ShowTime)->SetWindowTextW(_T(" ")); /*m_showtime.SetWindowText(_T("")); m_showtime.SetFocus();*/ //Up

鼠标移动表单变色及搜索框内图片提交按钮

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

自定义TextField的删除按钮

#import <UIKit/UIKit.h> @interface CustomTextField : UITextField @property(strong,nonatomic)NSString * alwaysShowStr; @end @interface CustomTextField () { UIButton * _button; } @end @implementation CustomTextField - (id)initWithFrame:(CGRect)frame {