Android自定义View软键盘实现搜索
1.xml文件中加入自定义搜索view
<com.etoury.etoury.ui.view.IconCenterEditText android:id="@+id/search_et" style="@style/StyleEditText" android:hint="搜索景点信息" />
2.自定义的 viewjava文件
IconCenterEditText.java
packagecom.etoury.etoury.ui.view;
importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.graphics.drawable.Drawable;
importandroid.text.TextUtils;
importandroid.util.AttributeSet;
importandroid.util.Log;
importandroid.view.KeyEvent;
importandroid.view.View;
importandroid.view.inputmethod.InputMethodManager;
importandroid.widget.EditText;
publicclassIconCenterEditTextextendsEditTextimplementsView.OnFocusChangeListener,View.OnKeyListener{
privatestaticfinalStringTAG=IconCenterEditText.class.getSimpleName();
/**
*是否是默认图标再左边的样式
*/
privatebooleanisLeft=false;
/**
*是否点击软键盘搜索
*/
privatebooleanpressSearch=false;
/**
*软键盘搜索键监听
*/
privateOnSearchClickListenerlistener;
publicvoidsetOnSearchClickListener(OnSearchClickListenerlistener){
this.listener=listener;
}
publicIconCenterEditText(Contextcontext){
this(context,null);
init();
}
publicIconCenterEditText(Contextcontext,AttributeSetattrs){
this(context,attrs,android.R.attr.editTextStyle);
init();
}
publicIconCenterEditText(Contextcontext,AttributeSetattrs,intdefStyleAttr){
super(context,attrs,defStyleAttr);
init();
}
privatevoidinit(){
setOnFocusChangeListener(this);
setOnKeyListener(this);
}
@Override
protectedvoidonDraw(Canvascanvas){
if(isLeft){//如果是默认样式,则直接绘制
super.onDraw(canvas);
}else{//如果不是默认样式,需要将图标绘制在中间
Drawable[]drawables=getCompoundDrawables();
DrawabledrawableLeft=drawables[0];
DrawabledrawableRight=drawables[2];
translate(drawableLeft,canvas);
translate(drawableRight,canvas);
//if(drawableLeft!=null){
//floattextWidth=getPaint().measureText(getHint().toString());
//intdrawablePadding=getCompoundDrawablePadding();
//intdrawableWidth=drawableLeft.getIntrinsicWidth();
//floatbodyWidth=textWidth+drawableWidth+drawablePadding;
//
//canvas.translate((getWidth()-bodyWidth-getPaddingLeft()-getPaddingRight())/2,0);
//}
//if(drawableRight!=null){
//floattextWidth=getPaint().measureText(getHint().toString());//文字宽度
//intdrawablePadding=getCompoundDrawablePadding();//图标间距
//intdrawableWidth=drawableRight.getIntrinsicWidth();//图标宽度
//floatbodyWidth=textWidth+drawableWidth+drawablePadding;
//setPadding(getPaddingLeft(),getPaddingTop(),(int)(getWidth()-bodyWidth-getPaddingLeft()),getPaddingBottom());
//canvas.translate((getWidth()-bodyWidth-getPaddingLeft())/2,0);
//}
super.onDraw(canvas);
}
}
publicvoidtranslate(Drawabledrawable,Canvascanvas){
if(drawable!=null){
floattextWidth=getPaint().measureText(getHint().toString());
intdrawablePadding=getCompoundDrawablePadding();
intdrawableWidth=drawable.getIntrinsicWidth();
floatbodyWidth=textWidth+drawableWidth+drawablePadding;
if(drawable==getCompoundDrawables()[0]){
canvas.translate((getWidth()-bodyWidth-getPaddingLeft()-getPaddingRight())/2,0);
}else{
setPadding(getPaddingLeft(),getPaddingTop(),(int)(getWidth()-bodyWidth-getPaddingLeft()),getPaddingBottom());
canvas.translate((getWidth()-bodyWidth-getPaddingLeft())/2,0);
}
}
}
@Override
publicvoidonFocusChange(Viewv,booleanhasFocus){
Log.d(TAG,"onFocusChangeexecute");
//恢复EditText默认的样式
if(!pressSearch&&TextUtils.isEmpty(getText().toString())){
isLeft=hasFocus;
}
}
@Override
publicbooleanonKey(Viewv,intkeyCode,KeyEventevent){
pressSearch=(keyCode==KeyEvent.KEYCODE_ENTER);
if(pressSearch&&listener!=null){
/*隐藏软键盘*/
InputMethodManagerimm=(InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm.isActive()){
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(),0);
}
listener.onSearchClick(v);
}
returnfalse;
}
publicinterfaceOnSearchClickListener{
voidonSearchClick(Viewview);
}
}
3.style
</style> <stylename="StyleEditText"> <itemname="android:layout_width">match_parent</item> <itemname="android:layout_height">wrap_content</item> <itemname="android:background">@drawable/bg_search_bar</item> <itemname="android:drawablePadding">5dp</item> <itemname="android:gravity">center_vertical</item> <itemname="android:imeOptions">actionSearch</item> <itemname="android:drawableLeft">@drawable/icon_search</item> <itemname="android:padding">5dp</item> <itemname="android:singleLine">true</item> <itemname="android:textColorHint">@color/grey</item> <itemname="android:textSize">16sp</item> <itemname="android:hint">搜索</item> </style>
4.bg_search_bar.xml
<?xmlversion="1.0"encoding="utf-8"?> <shapexmlns:android="http://schemas.android.com/apk/res/android"> <solidandroid:color="@android:color/white"/> <stroke android:width="1px" android:color="@android:color/darker_gray"/> <cornersandroid:radius="3dp"/> </shape>
5.activity中加上代码
privateIconCenterEditTextsearch_et;
search_et=(IconCenterEditText)findViewById(R.id.search_et);
search_et.setOnSearchClickListener(newOnSearchClickListener(){
@Override
publicvoidonSearchClick(Viewview){
//TODOAuto-generatedmethodstub
Stringtexts=search_et.getText().toString().trim();
if("".equals(texts)){
ToastUtil.showToast("请输入您要搜索的内容");
}else{
//根据你的文字内容实现跳转Intentintent=newIntent(context,
SearchWordActivity.class);
//intent.putExtra("searchMode",1);
intent.putExtra("searchWord",texts);
context.startActivity(intent);
}
}
});
以上内容是小编给大家介绍的Android自定义View软键盘实现搜索,希望大家喜欢。