Rumah > Java > javaTutorial > Android自定义View软键盘实现搜索

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

高洛峰
Lepaskan: 2017-01-07 11:52:19
asal
1251 orang telah melayarinya

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

<com.etoury.etoury.ui.view.IconCenterEditText
      android:id="@+id/search_et"
      style="@style/StyleEditText"
      android:hint="搜索景点信息"
      />
Salin selepas log masuk

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);
  }
}
Salin selepas log masuk


3. style

</style> 
      <style name="StyleEditText">
      <item name="android:layout_width">match_parent</item>
      <item name="android:layout_height">wrap_content</item>
      <item name="android:background">@drawable/bg_search_bar</item>
      <item name="android:drawablePadding">5dp</item>
      <item name="android:gravity">center_vertical</item>
      <item name="android:imeOptions">actionSearch</item>
      <item name="android:drawableLeft">@drawable/icon_search</item>
      <item name="android:padding">5dp</item>
      <item name="android:singleLine">true</item>
      <item name="android:textColorHint">@color/grey</item>
      <item name="android:textSize">16sp</item>
      <item name="android:hint">搜索</item>
    </style>
Salin selepas log masuk

4. bg_search_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <solid android:color="@android:color/white" />
  <stroke
    android:width="1px"
    android:color="@android:color/darker_gray" />
  <corners android:radius="3dp" />
</shape>
Salin selepas log masuk

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);
        }
      }
    });
Salin selepas log masuk

   

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

更多Android自定义View软键盘实现搜索相关文章请关注PHP中文网!


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan