博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决Android编辑框在全屏模式下无法检测布局变化的问题
阅读量:2189 次
发布时间:2019-05-02

本文共 2752 字,大约阅读时间需要 9 分钟。

铺垫的知识请看我的另一篇博客:

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	}	@Override	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {		// TODO Auto-generated method stub		super.onMeasure(widthMeasureSpec, heightMeasureSpec);//		Log.e("onMeasure ", "=>onMeasure called! widthMeasureSpec=" + widthMeasureSpec + ", heightMeasureSpec=" + heightMeasureSpec); 	}	@Override	protected void onLayout(boolean changed, int left, int top, int right,			int bottom) {		// TODO Auto-generated method stub		super.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);		}	}	@Override	protected void onSizeChanged(int w, int h, int oldw, int oldh) {		// TODO Auto-generated method stub		super.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参数的改变来监听我们的布局改变,那么我们自己来设置参数来控制相应的状态,从而实现实时监听。具体的细节就不再叙述了,感觉写的有点乱。

转载地址:http://ryyub.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】147- Insertion Sort List [Python]
查看>>
【算法】- 动态规划的编织艺术
查看>>
用 TensorFlow 让你的机器人唱首原创给你听
查看>>
对比学习用 Keras 搭建 CNN RNN 等常用神经网络
查看>>
深度学习的主要应用举例
查看>>
word2vec 模型思想和代码实现
查看>>
怎样做情感分析
查看>>
用深度神经网络处理NER命名实体识别问题
查看>>
用 RNN 训练语言模型生成文本
查看>>
RNN与机器翻译
查看>>
用 Recursive Neural Networks 得到分析树
查看>>
RNN的高级应用
查看>>
TensorFlow-7-TensorBoard Embedding可视化
查看>>
轻松看懂机器学习十大常用算法
查看>>
一个框架解决几乎所有机器学习问题
查看>>
特征工程怎么做
查看>>
机器学习算法应用中常用技巧-1
查看>>
机器学习算法应用中常用技巧-2
查看>>
通过一个kaggle实例学习解决机器学习问题
查看>>
决策树的python实现
查看>>