栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

  
      
      match_parent
      wrap_content
      @drawable/bg_search_bar
      5dp
      center_vertical
      actionSearch
      @drawable/icon_search
      5dp
      true
      @color/grey
      16sp
      搜索
    

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/163917.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号