安卓学习笔记---解决在在Edittext输入的时候,输入框被软键盘遮挡部分内容的问题(一)

这几天做项目的时候发现了一个问题,就是在做登录界面的时候,在点击密码输入框输入密码的时候,总是会出现这种情况:

首先是最开始的界面:


然后我点击密码输入框的时候,软键盘弹出的界面是这样的额,遮挡住了部分输入框:

这显然不是我们想要的效果,我想要的是将密码输入框以上的控件都上移,不被覆盖,需求知道了,现在就是怎么解决了,首先不管是问的群里的一些人,他们说在Mainfest清单文件里面的Activity设置:

<activity android:name=".user.LoginActivity"
          android:screenOrientation="portrait"
         android:windowSoftInputMode="stateVisible|adjustResize"   屏幕整体上移

/>

我添加进去了,但是却没什么效果,不符合要求,后来有查到说是全屏的这样设置是不不能成功的,好吧,又开始百度其他的方法,

有说这样可以:

网址:http://blog.csdn.net/xiechengfa/article/details/51122823

具体内容是这样的:

全屏模式下,即使将activity的windowSoftInputMode的属性设置为:adjustResize,在键盘显示时它未将Activity的Screen向上推动,所以你Activity的view的根树的尺寸是没有变化的。在这种情况下,你也就无法得知键盘的尺寸,对根view的作相应的推移。全屏下的键盘无法Resize的问题从2.1就已经存在了,直到现在google还未给予解决。
感谢Ricardo提供的轮子,他在stackoverflow找到了解决方案。有人已经封装好了该类,你只需引用就OK了。


使用方法

在你的Activity的oncreate()方法里调用AndroidBug5497Workaround.assistActivity(this);即可。注意:在setContentView(R.layout.xxx)之后调用。
 
 
 
  1. //Workaround to get adjustResize functionality for input methos when the fullscreen mode is on  
  2. //found by Ricardo  
  3. //taken from http://stackoverflow.com/a/19494006  
  4.    
  5. import android.app.Activity;  
  6. import android.graphics.Rect;  
  7. import android.view.View;  
  8. import android.view.ViewTreeObserver;  
  9. import android.widget.FrameLayout;  
  10.    
  11.    
  12. public class AndroidBug5497Workaround {  
  13.    
  14.     // For more information, see https://code.google.com/p/android/issues/detail?id=5497  
  15.     // To use this class, simply invoke assistActivity() on an Activity that already has its content view set.  
  16.    
  17.     public static void assistActivity (Activity activity) {  
  18.         new AndroidBug5497Workaround(activity);  
  19.     }  
  20.    
  21.     private View mChildOfContent;  
  22.     private int usableHeightPrevious;  
  23.     private FrameLayout.LayoutParams frameLayoutParams;  
  24.    
  25.     private AndroidBug5497Workaround(Activity activity) {  
  26.         FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);  
  27.         mChildOfContent = content.getChildAt(0);  
  28.         mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {  
  29.             public void onGlobalLayout() {  
  30.                 possiblyResizeChildOfContent();  
  31.             }  
  32.         });  
  33.         frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();  
  34.     }  
  35.    
  36.     private void possiblyResizeChildOfContent() {  
  37.         int usableHeightNow = computeUsableHeight();  
  38.         if (usableHeightNow != usableHeightPrevious) {  
  39.             int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();  
  40.             int heightDifference = usableHeightSansKeyboard - usableHeightNow;  
  41.             if (heightDifference > (usableHeightSansKeyboard/4)) {  
  42.                 // keyboard probably just became visible  
  43.                 frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;  
  44.             } else {  
  45.                 // keyboard probably just became hidden  
  46.                 frameLayoutParams.height = usableHeightSansKeyboard;  
  47.             }  
  48.             mChildOfContent.requestLayout();  
  49.             usableHeightPrevious = usableHeightNow;  
  50.         }  
  51.     }  
  52.    
  53.     private int computeUsableHeight() {  
  54.         Rect r = new Rect();  
  55.         mChildOfContent.getWindowVisibleDisplayFrame(r);  
  56.     if(r.top==0){  
  57.      r.top=statusBarH;//状态栏目的高度  
  58.     }  
  59.         return (r.bottom - r.top);  
  60.     }  
  61.    
  62. }  
OK,找到方法了,就开始测试了,我添加进去之后,but,依然不能成功,真不知道怎么办好了,快2天了!,然后继续百度,终于看到有说的这么一个方法:

网址:

http://blog.csdn.net/wk843620202/article/details/51580113

基本内容是这样的:

安卓界面虚拟键盘弹出下面布局怎么顶上去,解决方法如下:

1,在布局文件中,设置ScrollView 

<ScrollView 

android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值