`
yidongkaifa
  • 浏览: 4060932 次
文章分类
社区版块
存档分类
最新评论

Android 软键盘监听事件 Android软键盘的隐藏显示研究

 
阅读更多

Android软键盘的隐藏显示研究

Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入。
那么,弹出软键盘后必然会造成原有布局高度的减少,那么系统应该如何来处理布局的减少?我们能否在应用程序中进行自定义的控制?这些是本文要讨论的重点。


一、软键盘显示的原理
软件盘的本质是什么?软键盘其实是一个Dialog!
InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统对活动主窗口进行调整,从而为输入法腾出相应的空间,然后将该Dialog显示在底部,或者全屏显示。
二、活动主窗口调整
android定义了一个属性,名字为windowSoftInputMode, 用它可以让程序可以控制活动主窗口调整的方式。我们可以在AndroidManifet.xml中对Activity进行设置。如:android:windowSoftInputMode="stateUnchanged|adjustPan"
该属性可选的值有两部分,一部分为软键盘的状态控制,另一部分是活动主窗口的调整。前一部分本文不做讨论,请读者自行查阅android文档。
模式一,压缩模式
windowSoftInputMode的值如果设置为adjustResize,那么该Activity主窗口总是被调整大小以便留出软键盘的空间。
我们通过一段代码来测试一下,当我们设置了该属性后,弹出输入法时,系统做了什么。
重写Layout布局:

  
  1. 1.publicclassResizeLayoutextendsLinearLayout{
  2. 2.privatestaticintcount=0;
  3. 3.
  4. 4.publicResizeLayout(Contextcontext,AttributeSetattrs){
  5. 5.super(context,attrs);
  6. 6.}
  7. 7.
  8. 8.@Override
  9. 9.protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){
  10. 10.super.onSizeChanged(w,h,oldw,oldh);
  11. 11.
  12. 12.Log.e("onSizeChanged"+count++,"=>onResizecalled!w="+w+",h="+h+",oldw="+oldw+",oldh="+oldh);
  13. 13.}
  14. 14.
  15. 15.@Override
  16. 16.protectedvoidonLayout(booleanchanged,intl,intt,intr,intb){
  17. 17.super.onLayout(changed,l,t,r,b);
  18. 18.Log.e("onLayout"+count++,"=>OnLayoutcalled!l="+l+",t="+t+",r="+r+",b="+b);
  19. 19.}
  20. 20.
  21. 21.@Override
  22. 22.protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
  23. 23.super.onMeasure(widthMeasureSpec,heightMeasureSpec);
  24. 24.
  25. 25.Log.e("onMeasure"+count++,"=>onMeasurecalled!widthMeasureSpec="+widthMeasureSpec+",heightMeasureSpec="+heightMeasureSpec);
  26. 26.}

我们的布局设置为:

 
  1. 1.<com.winuxxan.inputMethodTest.ResizeLayout
  2. 2.xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3.android:id="@+id/root_layout"
  4. 4.android:layout_width="fill_parent"
  5. 5.android:layout_height="fill_parent"
  6. 6.android:orientation="vertical"
  7. 7.>
  8. 8.
  9. 9.<EditText
  10. 10.android:layout_width="fill_parent"
  11. 11.android:layout_height="wrap_content"
  12. 12./>
  13. 13.
  14. 14.<LinearLayout
  15. 15.android:id="@+id/bottom_layout"
  16. 16.android:layout_width="fill_parent"
  17. 17.android:layout_height="fill_parent"
  18. 18.android:orientation="vertical"
  19. 19.android:gravity="bottom">s
  20. 20.
  21. 21.<TextView
  22. 22.android:layout_width="fill_parent"
  23. 23.android:layout_height="wrap_content"
  24. 24.android:text="@string/hello"
  25. 25.android:background="#77777777"
  26. 26./>
  27. 27.</LinearLayout>
  28. 28.</com.winuxxan.inputMethodTest.ResizeLayout>

AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = "adjustResize"
运行程序,点击文本框,查看调试信息:
E/onMeasure 6(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742024
E/onMeasure 7(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742025
E/onSizeChanged 8(7960): =>onSizeChanged called! w=320,h=201,oldw=320,oldh=377
E/onLayout 9(7960): =>OnLayout called! l=0, t=0,r=320,b=201
从调试结果我们可以看出,当我们点击文本框后,根布局调用了onMeasure,onSizeChanged和onLayout。
实际上,当设置为adjustResize后,软键盘弹出时,要对主窗口布局重新进行measure和layout,而在layout时,发现窗口的大小发生的变化,因此调用了onSizeChanged。
从下图的运行结果我们也可以看出,原本在下方的TextView被顶到了输入法的上方。


模式二,平移模式
windowSoftInputMode的值如果设置为adjustPan,那么该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。
上面的例子中,我们将AndroidManifest.xml的属性进行更改:android: windowSoftInputMode = "adjustPan"

重新运行,并点击文本框,查看调试信息:
E/onMeasure 6(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742200
E/onMeasure 7(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742201
E/onLayout 8(8378): =>OnLayout called! l=0, t=0,r=320,b=377
我们看到:系统也重新进行了measrue和layout,但是我们发现,layout过程中onSizeChanged并没有调用,这说明输入法弹出前后并没有改变原有布局的大小。
从下图的运行结果我们可以看到,下方的TextView并没有被顶到输入法上方。

事实上,当输入框不会被遮挡时,该模式没有对布局进行调整,然而当输入框将要被遮挡时,窗口就会进行平移。也就是说,该模式始终是保持输入框为可见。如下图,整个窗口,包括标题栏均被上移,以保证文本框可见。

模式三 自动模式
当属性windowSoftInputMode被设置为adjustUspecified时,它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。
也就是说,系统自动决定是采用平移模式还是压缩模式,决定因素在于内容是否可以滚动。

三、侦听软键盘的显示隐藏
有时候,借助系统本身的机制来实现主窗口的调整并非我们想要的结果,我们可能希望在软键盘显示隐藏的时候,手动的对布局进行修改,以便使软键盘弹出时更加美观。这时就需要对软键盘的显示隐藏进行侦听。
直接对软键盘的显示隐藏侦听的方法本人没有找到,如果哪位找到的方法请务必告诉本人一声。还有本方法针对压缩模式,平移模式不一定有效。
我们可以借助软键盘显示和隐藏时,对主窗口进行了重新布局这个特性来进行侦听。如果我们设置的模式为压缩模式,那么我们可以对布局的onSizeChanged函数进行跟踪,如果为平移模式,那么该函数可能不会被调用。
我们可以重写根布局,因为根布局的高度一般情况下是不发生变化的。
假设跟布局为线性布局,模式为压缩模式,我们写一个例子,当输入法弹出时隐藏某个view,输入法隐藏时显示某个view。

  
    1. 1.publicclassResizeLayoutextendsLinearLayout{
    2. 2.privateOnResizeListenermListener;
    3. 3.
    4. 4.publicinterfaceOnResizeListener{
    5. 5.voidOnResize(intw,inth,intoldw,intoldh);
    6. 6.}
    7. 7.
    8. 8.publicvoidsetOnResizeListener(OnResizeListenerl){
    9. 9.mListener=l;
    10. 10.}
    11. 11.
    12. 12.publicResizeLayout(Contextcontext,AttributeSetattrs){
    13. 13.super(context,attrs);
    14. 14.}
    15. 15.
    16. 16.@Override
    17. 17.protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){
    18. 18.super.onSizeChanged(w,h,oldw,oldh);
    19. 19.
    20. 20.if(mListener!=null){
    21. 21.mListener.OnResize(w,h,oldw,oldh);
    22. 22.}
    23. 23.}
    24. 24.}

在我们的Activity中,通过如下方法调用:

    1. 1.publicclassInputMethodTestActivityextendsActivity{
    2. 2.privatestaticfinalintBIGGER=1;
    3. 3.privatestaticfinalintSMALLER=2;
    4. 4.privatestaticfinalintMSG_RESIZE=1;
    5. 5.
    6. 6.privatestaticfinalintHEIGHT_THREADHOLD=30;
    7. 7.
    8. 8.classInputHandlerextendsHandler{
    9. 9.@Override
    10. 10.publicvoidhandleMessage(Messagemsg){
    11. 11.switch(msg.what){
    12. 12.caseMSG_RESIZE:{
    13. 13.if(msg.arg1==BIGGER){
    14. 14.findViewById(R.id.bottom_layout).setVisibility(View.VISIBLE);
    15. 15.}else{
    16. 16.findViewById(R.id.bottom_layout).setVisibility(View.GONE);
    17. 17.}
    18. 18.}
    19. 19.break;
    20. 20.
    21. 21.default:
    22. 22.break;
    23. 23.}
    24. 24.super.handleMessage(msg);
    25. 25.}
    26. 26.}
    27. 27.
    28. 28.privateInputHandlermHandler=newInputHandler();
    29. 29.
    30. 30./**Calledwhentheactivityisfirstcreated.*/
    31. 31.@Override
    32. 32.publicvoidonCreate(BundlesavedInstanceState){
    33. 33.super.onCreate(savedInstanceState);
    34. 34.setContentView(R.layout.main);
    35. 35.
    36. 36.ResizeLayoutlayout=(ResizeLayout)findViewById(R.id.root_layout);
    37. 37.layout.setOnResizeListener(newResizeLayout.OnResizeListener(){
    38. 38.
    39. 39.publicvoidOnResize(intw,inth,intoldw,intoldh){
    40. 40.intchange=BIGGER;
    41. 41.if(h<oldh){
    42. 42.change=SMALLER;
    43. 43.}
    44. 44.
    45. 45.Messagemsg=newMessage();
    46. 46.msg.what=1;
    47. 47.msg.arg1=change;
    48. 48.mHandler.sendMessage(msg);
    49. 49.}
    50. 50.});
    51. 51.}
    52. 52.}

这里特别需要注意的是,不能直接在OnResizeListener中对要改变的View进行更改,因为OnSizeChanged函数实际上是运行在View的layout方法中,如果直接在onSizeChange中改变view的显示属性,那么很可能需要重新调用layout方法才能显示正确。然而我们的方法又是在layout中调用的,因此会出现错误。因此我们在例子中采用了Handler的方法。


原文:http://blog.csdn.net/yuzhiboyi/article/details/7835183
Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入。
那么,弹出软键盘后必然会造成原有布局高度的减少,那么系统应该如何来处理布局的减少?我们能否在应用程序中进行自定义的控制?这些是本文要讨论的重点。


一、软键盘显示的原理
软件盘的本质是什么?软键盘其实是一个Dialog!
InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统对活动主窗口进行调整,从而为输入法腾出相应的空间,然后将该Dialog显示在底部,或者全屏显示。
二、活动主窗口调整
android定义了一个属性,名字为windowSoftInputMode, 用它可以让程序可以控制活动主窗口调整的方式。我们可以在AndroidManifet.xml中对Activity进行设置。如:android:windowSoftInputMode="stateUnchanged|adjustPan"
该属性可选的值有两部分,一部分为软键盘的状态控制,另一部分是活动主窗口的调整。前一部分本文不做讨论,请读者自行查阅android文档。
模式一,压缩模式
windowSoftInputMode的值如果设置为adjustResize,那么该Activity主窗口总是被调整大小以便留出软键盘的空间。
我们通过一段代码来测试一下,当我们设置了该属性后,弹出输入法时,系统做了什么。
重写Layout布局:

  
  1. 1.publicclassResizeLayoutextendsLinearLayout{
  2. 2.privatestaticintcount=0;
  3. 3.
  4. 4.publicResizeLayout(Contextcontext,AttributeSetattrs){
  5. 5.super(context,attrs);
  6. 6.}
  7. 7.
  8. 8.@Override
  9. 9.protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){
  10. 10.super.onSizeChanged(w,h,oldw,oldh);
  11. 11.
  12. 12.Log.e("onSizeChanged"+count++,"=>onResizecalled!w="+w+",h="+h+",oldw="+oldw+",oldh="+oldh);
  13. 13.}
  14. 14.
  15. 15.@Override
  16. 16.protectedvoidonLayout(booleanchanged,intl,intt,intr,intb){
  17. 17.super.onLayout(changed,l,t,r,b);
  18. 18.Log.e("onLayout"+count++,"=>OnLayoutcalled!l="+l+",t="+t+",r="+r+",b="+b);
  19. 19.}
  20. 20.
  21. 21.@Override
  22. 22.protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
  23. 23.super.onMeasure(widthMeasureSpec,heightMeasureSpec);
  24. 24.
  25. 25.Log.e("onMeasure"+count++,"=>onMeasurecalled!widthMeasureSpec="+widthMeasureSpec+",heightMeasureSpec="+heightMeasureSpec);
  26. 26.}

我们的布局设置为:

 
  1. 1.<com.winuxxan.inputMethodTest.ResizeLayout
  2. 2.xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3.android:id="@+id/root_layout"
  4. 4.android:layout_width="fill_parent"
  5. 5.android:layout_height="fill_parent"
  6. 6.android:orientation="vertical"
  7. 7.>
  8. 8.
  9. 9.<EditText
  10. 10.android:layout_width="fill_parent"
  11. 11.android:layout_height="wrap_content"
  12. 12./>
  13. 13.
  14. 14.<LinearLayout
  15. 15.android:id="@+id/bottom_layout"
  16. 16.android:layout_width="fill_parent"
  17. 17.android:layout_height="fill_parent"
  18. 18.android:orientation="vertical"
  19. 19.android:gravity="bottom">s
  20. 20.
  21. 21.<TextView
  22. 22.android:layout_width="fill_parent"
  23. 23.android:layout_height="wrap_content"
  24. 24.android:text="@string/hello"
  25. 25.android:background="#77777777"
  26. 26./>
  27. 27.</LinearLayout>
  28. 28.</com.winuxxan.inputMethodTest.ResizeLayout>

AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = "adjustResize"
运行程序,点击文本框,查看调试信息:
E/onMeasure 6(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742024
E/onMeasure 7(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742025
E/onSizeChanged 8(7960): =>onSizeChanged called! w=320,h=201,oldw=320,oldh=377
E/onLayout 9(7960): =>OnLayout called! l=0, t=0,r=320,b=201
从调试结果我们可以看出,当我们点击文本框后,根布局调用了onMeasure,onSizeChanged和onLayout。
实际上,当设置为adjustResize后,软键盘弹出时,要对主窗口布局重新进行measure和layout,而在layout时,发现窗口的大小发生的变化,因此调用了onSizeChanged。
从下图的运行结果我们也可以看出,原本在下方的TextView被顶到了输入法的上方。


模式二,平移模式
windowSoftInputMode的值如果设置为adjustPan,那么该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。
上面的例子中,我们将AndroidManifest.xml的属性进行更改:android: windowSoftInputMode = "adjustPan"

重新运行,并点击文本框,查看调试信息:
E/onMeasure 6(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742200
E/onMeasure 7(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742201
E/onLayout 8(8378): =>OnLayout called! l=0, t=0,r=320,b=377
我们看到:系统也重新进行了measrue和layout,但是我们发现,layout过程中onSizeChanged并没有调用,这说明输入法弹出前后并没有改变原有布局的大小。
从下图的运行结果我们可以看到,下方的TextView并没有被顶到输入法上方。

事实上,当输入框不会被遮挡时,该模式没有对布局进行调整,然而当输入框将要被遮挡时,窗口就会进行平移。也就是说,该模式始终是保持输入框为可见。如下图,整个窗口,包括标题栏均被上移,以保证文本框可见。

模式三 自动模式
当属性windowSoftInputMode被设置为adjustUspecified时,它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。
也就是说,系统自动决定是采用平移模式还是压缩模式,决定因素在于内容是否可以滚动。

三、侦听软键盘的显示隐藏
有时候,借助系统本身的机制来实现主窗口的调整并非我们想要的结果,我们可能希望在软键盘显示隐藏的时候,手动的对布局进行修改,以便使软键盘弹出时更加美观。这时就需要对软键盘的显示隐藏进行侦听。
直接对软键盘的显示隐藏侦听的方法本人没有找到,如果哪位找到的方法请务必告诉本人一声。还有本方法针对压缩模式,平移模式不一定有效。
我们可以借助软键盘显示和隐藏时,对主窗口进行了重新布局这个特性来进行侦听。如果我们设置的模式为压缩模式,那么我们可以对布局的onSizeChanged函数进行跟踪,如果为平移模式,那么该函数可能不会被调用。
我们可以重写根布局,因为根布局的高度一般情况下是不发生变化的。
假设跟布局为线性布局,模式为压缩模式,我们写一个例子,当输入法弹出时隐藏某个view,输入法隐藏时显示某个view。

  
    1. 1.publicclassResizeLayoutextendsLinearLayout{
    2. 2.privateOnResizeListenermListener;
    3. 3.
    4. 4.publicinterfaceOnResizeListener{
    5. 5.voidOnResize(intw,inth,intoldw,intoldh);
    6. 6.}
    7. 7.
    8. 8.publicvoidsetOnResizeListener(OnResizeListenerl){
    9. 9.mListener=l;
    10. 10.}
    11. 11.
    12. 12.publicResizeLayout(Contextcontext,AttributeSetattrs){
    13. 13.super(context,attrs);
    14. 14.}
    15. 15.
    16. 16.@Override
    17. 17.protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){
    18. 18.super.onSizeChanged(w,h,oldw,oldh);
    19. 19.
    20. 20.if(mListener!=null){
    21. 21.mListener.OnResize(w,h,oldw,oldh);
    22. 22.}
    23. 23.}
    24. 24.}

在我们的Activity中,通过如下方法调用:

    1. 1.publicclassInputMethodTestActivityextendsActivity{
    2. 2.privatestaticfinalintBIGGER=1;
    3. 3.privatestaticfinalintSMALLER=2;
    4. 4.privatestaticfinalintMSG_RESIZE=1;
    5. 5.
    6. 6.privatestaticfinalintHEIGHT_THREADHOLD=30;
    7. 7.
    8. 8.classInputHandlerextendsHandler{
    9. 9.@Override
    10. 10.publicvoidhandleMessage(Messagemsg){
    11. 11.switch(msg.what){
    12. 12.caseMSG_RESIZE:{
    13. 13.if(msg.arg1==BIGGER){
    14. 14.findViewById(R.id.bottom_layout).setVisibility(View.VISIBLE);
    15. 15.}else{
    16. 16.findViewById(R.id.bottom_layout).setVisibility(View.GONE);
    17. 17.}
    18. 18.}
    19. 19.break;
    20. 20.
    21. 21.default:
    22. 22.break;
    23. 23.}
    24. 24.super.handleMessage(msg);
    25. 25.}
    26. 26.}
    27. 27.
    28. 28.privateInputHandlermHandler=newInputHandler();
    29. 29.
    30. 30./**Calledwhentheactivityisfirstcreated.*/
    31. 31.@Override
    32. 32.publicvoidonCreate(BundlesavedInstanceState){
    33. 33.super.onCreate(savedInstanceState);
    34. 34.setContentView(R.layout.main);
    35. 35.
    36. 36.ResizeLayoutlayout=(ResizeLayout)findViewById(R.id.root_layout);
    37. 37.layout.setOnResizeListener(newResizeLayout.OnResizeListener(){
    38. 38.
    39. 39.publicvoidOnResize(intw,inth,intoldw,intoldh){
    40. 40.intchange=BIGGER;
    41. 41.if(h<oldh){
    42. 42.change=SMALLER;
    43. 43.}
    44. 44.
    45. 45.Messagemsg=newMessage();
    46. 46.msg.what=1;
    47. 47.msg.arg1=change;
    48. 48.mHandler.sendMessage(msg);
    49. 49.}
    50. 50.});
    51. 51.}
    52. 52.}

这里特别需要注意的是,不能直接在OnResizeListener中对要改变的View进行更改,因为OnSizeChanged函数实际上是运行在View的layout方法中,如果直接在onSizeChange中改变view的显示属性,那么很可能需要重新调用layout方法才能显示正确。然而我们的方法又是在layout中调用的,因此会出现错误。因此我们在例子中采用了Handler的方法。


原文:http://blog.csdn.net/yuzhiboyi/article/details/7835183
分享到:
评论

相关推荐

    android监听软键盘状态

    检测软键盘是否显示或隐藏的功能。blog:http://blog.csdn.net/hehaiminginadth/article/details/48435703

    Android软键盘打开/关闭监听器

    在开发时遇到一个问题,需要对软...但是由于android不直接提供对软键盘打开与关闭操作的监听器,所以必须自己来写一个关于软键盘打开/关闭的监听器。 原理是通过对OnGlobalLayoutListener()来实现对软键盘的状态监听器

    Android监听软键盘弹出和收起事件

    监听Android软键盘弹出和收起事件(所有代码都是抽离自facebook/react-native源码中, 亲测有效, 放心食用)。回调事件方法参数包含键盘是否弹出(isShow)、键盘高度(keyboardHeight)、屏幕可用高度(screenHeight)、屏幕...

    android 监听软键盘状态(弹起还是收起)

    android 监听软键盘状态(弹起还是收起),你懂的,没有现成的方法,通过跟布局的高度判断。

    监听软键盘的弹出与收起(近乎完美的)

    3种方法实现软键盘监听的,种有一款适合你

    监听软键盘弹出和隐藏

    网上搜到很多关于这方面的介绍,最流行的就是在压缩模式下通过监听onLayout()函数来实现的监听,这种方法可能不适合希望在软键盘弹出时控件平移而非压缩需求的开发者,因此,我们的需求就是在符合任意控件在软键盘...

    Android监听输入法软键盘按键demo

    Android App监听软键盘按键的三种方式(http://blog.csdn.net/zhufuing/article/details/18964725)博文中所用的demo

    Android 监听键盘回车键事件

    我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“GO”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在...

    android中监听软键盘的弹出与隐藏,并获取软键盘的高度

    android中监听软键盘的弹出与隐藏,并获取软键盘的高度,在adjustPan,adjustResize,adjustUnspecified下都可以

    Android软键盘返回键监听.zip

    支持包括谷歌系列手机(nexus,pix。。。 )软键盘返回键的监听,博客:https://blog.csdn.net/Crystal_xing/article/details/102680648

    android自定义View在软键盘上方,监听软键盘的状态一个测量其高度

    在软键盘弹出后随即弹出自定义的PopuWindow在其上方,里面还给PopuWindow加入了显示 和消失的动画,另外实现了对软键盘显示和隐藏状态的监听,以及对其高度的测量,需要做些逻辑处理的话可以直接在里面写相关的代码...

    监听软键盘的弹出与收起

    近乎完美的监听软键盘的弹出与收起的

    android软键盘上移动焦点

    android自带的输入法,在软键盘上实现焦点移动,支持上下左右按键,并支持回车输入,文档以LatinIME为例

    Android判断软键盘是否弹出

    通过重写onLayout方法,判断软键盘是否弹出。判断到键盘是否弹出后,就可以做自己想做的事情了。

    android软键盘

    目前项目中需要用到自定义的数字软键盘,通过查找资料,最后写出的一个数字键盘,大家一起学习共享!blog:http://blog.csdn.net/hehaiminginadth/article/details/48368777

    android 监听软键盘.zip

    根据addOnGlobalLayoutListener 来监听判断软键盘是否弹出

    Android键盘 AOSP监听delete按键

    Android键盘AOSP监听delete按键:通过重写EditText的InputConnection 类的sendKeyEvent 方法来解决这个问题

    Android软键盘学习资料

    最近做项目涉及到android软键盘,搜索了很多资料都不是很满意,这些是我搜到的还可以的资料,大家可以参考一下,最后用的handler解决的监听键盘隐藏,没有贴到这里面,等更新之后传给大家。

    Android App实现监听软键盘按键的三种方式

    我们在Android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“Go”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在...

Global site tag (gtag.js) - Google Analytics