检测软键盘的弹起与隐藏【绝对经典,好用】 ...
2014-05-08 14:06
471 查看
今天看到社区里面有人问关于如何检测软键盘的弹起和隐藏事件。正确处理好软键盘的弹起和隐藏可以大大提升应用的体验。这一点,“切客优惠”做的很好。
device-2012-02-23-231400.png (53.25 KB, 下载次数: 12)
下载附件
保存到相册
2012-2-23 23:20 上传
device-2012-02-23-231422.png (57.62 KB, 下载次数: 5)
下载附件
保存到相册
2012-2-23 23:20 上传
在软键盘弹起后,下面的分享内容自动隐藏,并且在titlebar上,显示签到按钮。这个是一个非常贴心的设计,用户体检大大提升。
这是被大家视为无解的难题,我给大家提供一种方法。
有图为证:
device-2012-02-23-223840.png (35.14 KB, 下载次数: 8)
下载附件
保存到相册
2012-2-23 22:48 上传
初始化页面
device-2012-02-23-223901.png (32.84 KB, 下载次数: 3)
下载附件
保存到相册
2012-2-23 22:48 上传
刀客优化版初始页
device-2012-02-23-225120.png (65.01 KB, 下载次数: 3)
下载附件
保存到相册
2012-2-23 22:52 上传
优化版键盘弹起
device-2012-02-23-223957.png (37.78 KB, 下载次数: 3)
下载附件
保存到相册
2012-2-23 22:48 上传
软键盘隐藏
device-2012-02-23-224010.png (29.83 KB, 下载次数: 3)
下载附件
保存到相册
2012-2-23 22:48 上传
嘿嘿,未优化版的钉子户
device-2012-02-23-224022.png (58.92 KB, 下载次数: 4)
下载附件
保存到相册
2012-2-23 22:48 上传
钉子户果然坚挺啊
下面谈谈偶的实现原理:
使用自定义布局,页面布局中包含ScrollVIew,在软键盘弹起后,布局的高度会发生改变,根据布局的高度来判断软键盘的状态。
view source
print?
这个是自定义的布局,自定义布局可以继承各种常见布局。自定义布局有键盘状态改变监听器,可以通过注册监听器来监听软键盘状态。
view source
print?
这个是优化页面的布局,从上面可以看出自定义布局的用法。
view source
print?
这个是优化页面的代码逻辑,通过注册监听器,来监听软键盘事件。在软键盘弹起时隐藏Textview,在软键盘隐藏时显示Textview。
附上源码:
KeyBoard.zip(67.5
KB, 下载次数: 1522)
2012-2-23 23:06 上传
点击文件名下载附件
下载积分: e币 -10 元
欢迎大家反馈交流。
device-2012-02-23-231400.png (53.25 KB, 下载次数: 12)
下载附件
保存到相册
2012-2-23 23:20 上传
device-2012-02-23-231422.png (57.62 KB, 下载次数: 5)
下载附件
保存到相册
2012-2-23 23:20 上传
在软键盘弹起后,下面的分享内容自动隐藏,并且在titlebar上,显示签到按钮。这个是一个非常贴心的设计,用户体检大大提升。
这是被大家视为无解的难题,我给大家提供一种方法。
有图为证:
device-2012-02-23-223840.png (35.14 KB, 下载次数: 8)
下载附件
保存到相册
2012-2-23 22:48 上传
初始化页面
device-2012-02-23-223901.png (32.84 KB, 下载次数: 3)
下载附件
保存到相册
2012-2-23 22:48 上传
刀客优化版初始页
device-2012-02-23-225120.png (65.01 KB, 下载次数: 3)
下载附件
保存到相册
2012-2-23 22:52 上传
优化版键盘弹起
device-2012-02-23-223957.png (37.78 KB, 下载次数: 3)
下载附件
保存到相册
2012-2-23 22:48 上传
软键盘隐藏
device-2012-02-23-224010.png (29.83 KB, 下载次数: 3)
下载附件
保存到相册
2012-2-23 22:48 上传
嘿嘿,未优化版的钉子户
device-2012-02-23-224022.png (58.92 KB, 下载次数: 4)
下载附件
保存到相册
2012-2-23 22:48 上传
钉子户果然坚挺啊
下面谈谈偶的实现原理:
使用自定义布局,页面布局中包含ScrollVIew,在软键盘弹起后,布局的高度会发生改变,根据布局的高度来判断软键盘的状态。
view source
print?
01 | package com.ransj.keyboard; |
02 |
03 | import android.content.Context; |
04 | import android.util.AttributeSet; |
05 | import android.util.Log; |
06 | import android.widget.RelativeLayout; |
07 |
08 | public class KeyboardLayout extends RelativeLayout { |
09 | private static final String TAG = KeyboardLayout. class .getSimpleName(); |
10 | public static final byte KEYBOARD_STATE_SHOW = - 3 ; |
11 | public static final byte KEYBOARD_STATE_HIDE = - 2 ; |
12 | public static final byte KEYBOARD_STATE_INIT = - 1 ; |
13 | private boolean mHasInit; |
14 | private boolean mHasKeybord; |
15 | private int mHeight; |
16 | private onKybdsChangeListener mListener; |
17 |
18 | public KeyboardLayout(Context context,AttributeSet attrs, int defStyle) { |
19 | super (context,attrs, defStyle); |
20 | } |
21 |
22 | public KeyboardLayout(Context context,AttributeSet attrs) { |
23 | super (context,attrs); |
24 | } |
25 |
26 | public KeyboardLayout(Context context) { |
27 | super (context); |
28 | } |
29 | /** |
30 | * set keyboard state listener |
31 | */ |
32 | public void setOnkbdStateListener(onKybdsChangeListener listener){ |
33 | mListener = listener; |
34 | } |
35 | @Override |
36 | protected void onLayout( boolean changed, int l, int t, int r, int b) { |
37 | super .onLayout(changed,l, t,r,b); |
38 | if (!mHasInit) { |
39 | mHasInit = true ; |
40 | mHeight = b; |
41 | if (mListener != null ) { |
42 | mListener.onKeyBoardStateChange(KEYBOARD_STATE_INIT); |
43 | } |
44 | } else { |
45 | mHeight = mHeight < b ? b : mHeight; |
46 | } |
47 | if (mHasInit && mHeight > b) { |
48 | mHasKeybord = true ; |
49 | if (mListener != null ) { |
50 | mListener.onKeyBoardStateChange(KEYBOARD_STATE_SHOW); |
51 | } |
52 | Log.w(TAG, "show keyboard......." ); |
53 | } |
54 | if (mHasInit && mHasKeybord && mHeight == b) { |
55 | mHasKeybord = false ; |
56 | if (mListener != null ) { |
57 | mListener.onKeyBoardStateChange(KEYBOARD_STATE_HIDE); |
58 | } |
59 | Log.w(TAG, "hide keyboard......." ); |
60 | } |
61 | } |
62 |
63 | public interface onKybdsChangeListener{ |
64 | public void onKeyBoardStateChange( int state); |
65 | } |
66 | } |
view source
print?
01 | <?xml version= "1.0" encoding= "utf-8" ?> |
02 | <com.ransj.keyboard.KeyboardLayoutxmlns:android= "http://schemas.android.com/apk/res/android" |
03 | android:id= "@+id/keyboardLayout1" |
04 | android:layout_width= "fill_parent" |
05 | android:layout_height= "fill_parent" > |
06 |
07 | <ScrollView |
08 | android:layout_width= "fill_parent" |
09 | android:layout_height= "fill_parent" |
10 | android:layout_alignParentLeft= "true" |
11 | android:layout_alignParentTop= "true" |
12 | android:fillViewport= "true" > |
13 |
14 | <LinearLayout |
15 | android:layout_width= "fill_parent" |
16 | android:layout_height= "wrap_content" |
17 | android:orientation= "vertical" > |
18 |
19 | <TextView |
20 | android:id= "@+id/testone_tv" |
21 | android:layout_width= "fill_parent" |
22 | android:layout_height= "wrap_content" |
23 | android:background= "#000000" |
24 | android:gravity= "center" |
25 | android:text= "软件盘弹起,我将消失!软键盘隐藏,我将回来!" |
26 | android:layout_weight= "1.0" |
27 | android:textColor= "#00ff00" |
28 | android:textStyle= "bold" /> |
29 |
30 | <EditText |
31 | android:id= "@+id/testone_et" |
32 | android:layout_width= "fill_parent" |
33 | android:layout_height= "wrap_content" ></EditText> |
34 | </LinearLayout> |
35 | </ScrollView> |
36 |
37 | </com.ransj.keyboard.KeyboardLayout> |
view source
print?
01 | package com.ransj.keyboard; |
02 |
03 | import com.ransj.keyboard.KeyboardLayout.onKybdsChangeListener; |
04 |
05 | import android.app.Activity; |
06 | import android.os.Bundle; |
07 | import android.view.View; |
08 | import android.widget.TextView; |
09 | import android.widget.Toast; |
10 | /** |
11 | * |
12 | * |
13 | */ |
14 | public class TestOne extends Activity{ |
15 |
16 | @Override |
17 | protected void onCreate(Bundle savedInstanceState) { |
18 | super .onCreate(savedInstanceState); |
19 | setContentView(R.layout.testone); |
20 | KeyboardLayoutmainView = (KeyboardLayout) findViewById(R.id.keyboardLayout1); |
21 | final TextView tv = (TextView) findViewById(R.id.testone_tv); |
22 | mainView.setOnkbdStateListener( new onKybdsChangeListener() { |
23 |
24 | public void onKeyBoardStateChange( int state) { |
25 | switch (state) { |
26 | case KeyboardLayout.KEYBOARD_STATE_HIDE: |
27 | tv.setVisibility(View.VISIBLE); |
28 | Toast.makeText(getApplicationContext(), "软键盘隐藏" , Toast.LENGTH_SHORT).show(); |
29 | break ; |
30 | case KeyboardLayout.KEYBOARD_STATE_SHOW: |
31 | tv.setVisibility(View.INVISIBLE); |
32 | Toast.makeText(getApplicationContext(), "软键盘弹起" , Toast.LENGTH_SHORT).show(); |
33 | break ; |
34 | } |
35 | } |
36 | }); |
37 | } |
38 |
39 | @Override |
40 | protected void onDestroy() { |
41 | super .onDestroy(); |
42 | } |
43 |
44 | @Override |
45 | protected void onPause() { |
46 | super .onPause(); |
47 | } |
48 | } |
附上源码:
KeyBoard.zip(67.5
KB, 下载次数: 1522)
2012-2-23 23:06 上传
点击文件名下载附件
下载积分: e币 -10 元
欢迎大家反馈交流。
相关文章推荐
- 检测软键盘的弹起与隐藏【绝对经典,好用】
- 检测软键盘的弹起与隐藏【绝对经典,好用】
- 检测软键盘的弹起与隐藏【绝对经典,好用】
- android 检测软键盘的弹起与隐藏【绝对经典,好用】
- 检测软键盘的弹起与隐藏
- Android检测软键盘的弹起与隐藏
- 检测软键盘的弹起与隐藏
- Android 检测软键盘的弹起与隐藏
- android 监听软键盘弹起和关闭状态与点击空白区域软键盘隐藏
- android检测软键盘是否弹起
- 随软键盘的弹起与隐藏,界面做合理的调整的一种实现(避免软键盘遮挡内容的显示)
- iOS软键盘当被遮挡时,自动弹起,点击return时隐藏软键盘,点击外部UIView时,隐藏软键盘
- 监听软键盘的弹起与隐藏
- Android 软键盘弹起隐藏的监听
- Android监听软键盘的弹起和隐藏
- Android检测软键盘显示状态,隐藏软件键盘
- 检测隐藏进程(一)
- Java基础知识总结(绝对经典)
- Android软键盘的隐藏显示
- 判断软键盘显示与隐藏