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软键盘实现搜索,希望大家喜欢。