android键盘按钮搜索,Android自定义View软键盘实现搜索

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

android:id="@+id/search_et"

style="@style/StyleEditText"

android:hint="搜索景点信息"

/>

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

android:width="1px"

android:color="@android:color/darker_gray" />

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值