1. xml文件中加入自定义 搜索view
1
2
3
4
5
|
<com.etoury.etoury.ui.view.iconcenteredittext android:id= "@+id/search_et" style= "@style/styleedittext" android:hint= "搜索景点信息" /> |
2. 自定义的 view java文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
</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> |
4. bg_search_bar.xml
1
2
3
4
5
6
7
8
|
<?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> |
5. activity 中加上代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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软键盘实现搜索,希望大家喜欢。