解决Android编辑框在全屏模式下无法检测布局变化的问题

本文主要是介绍解决Android编辑框在全屏模式下无法检测布局变化的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解决Android编辑框在全屏模式下无法检测布局变化的问题       
        分类:            Android 225人阅读 评论(0) 收藏 举报
android Android layout Layout 软键盘的显示和隐藏监听


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

[java] view plain copy print ?
  1. package com.jqbar; 
  2.  
  3. import android.content.Context; 
  4. import android.util.AttributeSet; 
  5. import android.util.Log; 
  6. import android.widget.FrameLayout; 
  7.  
  8. public class MyFrameLayout extends FrameLayout{ 
  9.      
  10.     private onResizeListener listener; 
  11.      
  12.     public interface onResizeListener 
  13.     { 
  14.          void OnResize(int w, int h, int oldw, int oldh); 
  15.     } 
  16.      
  17.      public void setOnResizeListener(onResizeListener l) {  
  18.          listener = l; 
  19.      } 
  20.      
  21.     public MyFrameLayout(Context context, AttributeSet attrs) { 
  22.         super(context, attrs); 
  23.         // TODO Auto-generated constructor stub 
  24.     } 
  25.     @Override 
  26.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
  27.         // TODO Auto-generated method stub 
  28.         super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
  29. //      Log.e("onMeasure ", "=>onMeasure called! widthMeasureSpec=" + widthMeasureSpec + ", heightMeasureSpec=" + heightMeasureSpec);  
  30.     } 
  31.     @Override 
  32.     protected void onLayout(boolean changed, int left, int top, int right, 
  33.             int bottom) { 
  34.         // TODO Auto-generated method stub 
  35.         super.onLayout(changed, left, top, right, bottom); 
  36.         Log.e("onLayout ", "=>OnLayout called! changed="+ changed+",l=" + left + ", t=" + top + ",r=" + right + ",b="+bottom);    
  37.         if(listener!=null
  38.         { 
  39.             listener.OnResize(left,top,right,bottom); 
  40.         } 
  41.     } 
  42.     @Override 
  43.     protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
  44.         // TODO Auto-generated method stub 
  45.         super.onSizeChanged(w, h, oldw, oldh); 
  46. //       Log.e("onSizeChanged ", "=>onResize called! w="+w + ",h="+h+",oldw="+oldw+",oldh="+oldh);    
  47.     } 
  48.  
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函数里面相应的参数也不会改变。此时将无法通过检测参数的数值变化来监听软键盘的显示和隐藏,从而无法在显示和隐藏软键盘时实时改变自己的布局。


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

[java] view plain copy print ?
  1. if(msg.what == MSG_HIDESOFTINPUT) 
  2.         { 
  3.             if(showSoftInput&&!bCallTextEdit) 
  4.             { 
  5.                 mScrollView.scrollBy(0, 50-dy); 
  6.                                 showSoftInput = false
  7.             } 
  8.             else if(showSoftInput&&bCallTextEdit) 
  9.             { 
  10.                 callTimeCount += 1
  11.                 if(callTimeCount == 2
  12.                 { 
  13.                 bCallTextEdit = false
  14.                 callTimeCount = 0
  15.                 } 
  16.             } 
 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参数的改变来监听我们的布局改变,那么我们自己来设置参数来控制相应的状态,从而实现实时监听。具体的细节就不再叙述了,感觉写的有点乱。

这篇关于解决Android编辑框在全屏模式下无法检测布局变化的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069234

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利,不是随便说说,诸葛亮六出祁山,连关中陇右的几座小城都攻不下来,行军山高路险,无法携带和建造攻城器械,是最难的,所以在汉中,无论从哪一方进攻,防守方都是一夫当关,万夫莫开;再加上千里运粮,根本不需要打,司马懿只需要坚守城池拼消耗就能不战而屈人之兵。 另一边,洛阳的虎牢关,一旦突破,洛阳就无险可守,这样的进军路线,才是顺势而为的用兵之道。 读历史的时候我们常常看到某一方势

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监