铺垫的知识请看我的另一篇博客:Android软键盘的显示和隐藏

package com.jqbar;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.widget.FrameLayout;public class MyFrameLayout extends FrameLayout{private onResizeListener listener;public interface onResizeListener{ void OnResize(int w, int h, int oldw, int oldh);} public void setOnResizeListener(onResizeListener l) {  listener = l; }public MyFrameLayout(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// TODO Auto-generated method stubsuper.onMeasure(widthMeasureSpec, heightMeasureSpec);//Log.e("onMeasure ", "=>onMeasure called! widthMeasureSpec=" + widthMeasureSpec + ", heightMeasureSpec=" + heightMeasureSpec); }@Overrideprotected void onLayout(boolean changed, int left, int top, int right,int bottom) {// TODO Auto-generated method stubsuper.onLayout(changed, left, top, right, bottom);Log.e("onLayout ", "=>OnLayout called! changed="+ changed+",l=" + left + ", t=" + top + ",r=" + right + ",b="+bottom);   if(listener!=null){listener.OnResize(left,top,right,bottom);}}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {// TODO Auto-generated method stubsuper.onSizeChanged(w, h, oldw, oldh);// Log.e("onSizeChanged ", "=>onResize called! w="+w + ",h="+h+",oldw="+oldw+",oldh="+oldh);   }}

以上的代码在

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);设置全屏后,就算是布局改变了,但是onLayout函数里面相应的参数也不会改变。此时将无法通过检测参数的数值变化来监听软键盘的显示和隐藏,从而无法在显示和隐藏软键盘时实时改变自己的布局。


但是虽然传过来的参数是不对的,但是还是会调用相应的接口,所以通过相应的设置一些参数,并且根据我们程序的特点来限定各种状态,从而能够实现软键盘的显示和隐藏的监听。这就是我的总的思路

 if(msg.what == MSG_HIDESOFTINPUT)        {        if(showSoftInput&&!bCallTextEdit)        {        mScrollView.scrollBy(0, 50-dy);                        showSoftInput = false ;        }        else if(showSoftInput&&bCallTextEdit)        {        callTimeCount += 1;        if(callTimeCount == 2)        {        bCallTextEdit = false;        callTimeCount = 0;        }        }


其中的showSoftInput 和bCallTextEdit为boolean类型

这里的想法是: 当弹出软键盘时showSoftInput和bCallTextEdit都为true,此时我们修改我们的布局,并且弹出软键盘时会监听到布局变化,会执行

callTimeCount += 1;
if(callTimeCount == 2)
{
bCallTextEdit = false;
callTimeCount = 0;
}

这些语句,此时onLayout会被调用两次,所以用callTimeCount来记数,然后设置bCallTextEdit 为false,这时的状态是软键盘为显示状态。


点击隐藏软键盘时会执行这些语句

if(showSoftInput&&!bCallTextEdit)
{
mScrollView.scrollBy(0, 50-dy);//这里我们就可以恢复我们的布局了
showSoftInput = false ;

}



整体的思路就是这样,我们不能通过onLayout参数的改变来监听我们的布局改变,那么我们自己来设置参数来控制相应的状态,从而实现实时监听。具体的细节就不再叙述了,感觉写的有点乱。


更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. Python技巧匿名函数、回调函数和高阶函数
  3. python list.sort()根据多个关键字排序的方法实现
  4. 如何去除launcher 上默认的 google search bar.
  5. Android中Activity之间访问互传参数
  6. Android(安卓)ListView 之 SimpleAdapter 二 (包含 item 中按钮
  7. Android(安卓)软键盘相关辅助类KeyBoardUtils
  8. Android:通过WifiManager监听Wifi信号强弱
  9. Android又一个超漂亮的日历控件

随机推荐

  1. Jack 服务编译问题 Android(安卓)7.0
  2. Android的BUG(五)- Android跨进程使用Graph
  3. Android基于Ffmpeg 的软编软解的可视对讲
  4. [Android1.6]横竖屏切换时自动弹出键盘的
  5. 手机改 user模式为debug模式
  6. 使用android真机测试http网络连接异常解
  7. Android常用布局范例
  8. Android(安卓)Zxing集成
  9. Android(安卓)网络请求框架总结(二)
  10. Android控制使用视频教程