Android自定义View软键盘实现搜索

本文给大家分享android自定义view软键盘实现搜索,对android软键盘相关知识感兴趣的朋友一起学习吧

1. xml文件中加入自定义 搜索view

 

2. 自定义的   view java文件

 IconCenterEditText.java package com.etoury.etoury.ui.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; public class IconCenterEditText extends EditText implements View.OnFocusChangeListener, View.OnKeyListener { private static final String TAG = IconCenterEditText.class.getSimpleName(); /** * 是否是默认图标再左边的样式 */ private boolean isLeft = false; /** * 是否点击软键盘搜索 */ private boolean pressSearch = false; /** * 软键盘搜索键监听 */ private OnSearchClickListener listener; public void setOnSearchClickListener(OnSearchClickListener listener) { this.listener = listener; } public IconCenterEditText(Context context) { this(context, null); init(); } public IconCenterEditText(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.editTextStyle); init(); } public IconCenterEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { setOnFocusChangeListener(this); setOnKeyListener(this); } @Override protected void onDraw(Canvas canvas) { if (isLeft) { // 如果是默认样式,则直接绘制 super.onDraw(canvas); } else { // 如果不是默认样式,需要将图标绘制在中间 Drawable[] drawables = getCompoundDrawables(); Drawable drawableLeft = drawables[0]; Drawable drawableRight = drawables[2]; translate(drawableLeft, canvas); translate(drawableRight, canvas); //      if (drawableLeft != null) { //        float textWidth = getPaint().measureText(getHint().toString()); //        int drawablePadding = getCompoundDrawablePadding(); //        int drawableWidth = drawableLeft.getIntrinsicWidth(); //        float bodyWidth = textWidth + drawableWidth + drawablePadding; // //        canvas.translate((getWidth() - bodyWidth - getPaddingLeft() - getPaddingRight()) / 2, 0); //      } //      if (drawableRight != null) { //        float textWidth = getPaint().measureText(getHint().toString()); // 文字宽度 //        int drawablePadding = getCompoundDrawablePadding(); // 图标间距 //        int drawableWidth = drawableRight.getIntrinsicWidth(); // 图标宽度 //        float bodyWidth = textWidth + drawableWidth + drawablePadding; //        setPadding(getPaddingLeft(), getPaddingTop(), (int)(getWidth() - bodyWidth - getPaddingLeft()), getPaddingBottom()); //        canvas.translate((getWidth() - bodyWidth - getPaddingLeft()) / 2, 0); //      } super.onDraw(canvas); } } public void translate(Drawable drawable, Canvas canvas) { if (drawable != null) { float textWidth = getPaint().measureText(getHint().toString()); int drawablePadding = getCompoundDrawablePadding(); int drawableWidth = drawable.getIntrinsicWidth(); float bodyWidth = 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 public void onFocusChange(View v, boolean hasFocus) { Log.d(TAG, "onFocusChange execute"); // 恢复EditText默认的样式 if (!pressSearch && TextUtils.isEmpty(getText().toString())) { isLeft = hasFocus; } } @Override public boolean onKey(View v, int keyCode, KeyEvent event) { pressSearch = (keyCode == KeyEvent.KEYCODE_ENTER); if (pressSearch && listener != null) { /*隐藏软键盘*/ InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive()) { imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0); } listener.onSearchClick(v); } return false; } public interface OnSearchClickListener { void onSearchClick(View view); } }

 3. style

 

 4. bg_search_bar.xml

   

 5. activity 中加上代码

 private IconCenterEditText search_et; search_et = (IconCenterEditText) findViewById(R.id.search_et); search_et.setOnSearchClickListener(new OnSearchClickListener() { @Override public void onSearchClick(View view) { // TODO Auto-generated method stub String texts = search_et.getText().toString().trim(); if ("".equals(texts)) { ToastUtil.showToast("请输入您要搜索的内容"); } else { //根据你的文字内容实现跳转          Intent intent = new Intent(context, SearchWordActivity.class); // intent.putExtra("searchMode", 1); intent.putExtra("searchWord", texts); context.startActivity(intent); } } });

以上内容是小编给大家介绍的Android自定义View软键盘实现搜索,希望大家喜欢。

以上就是Android自定义View软键盘实现搜索的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 移动