zoukankan      html  css  js  c++  java
  • 5、输入法弹出时布局错乱的解决方案

    现在有这样一个布局:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 
     3 <com.clientMenu.CustomScrollView
     4      xmlns:android="http://schemas.android.com/apk/res/android"
     5     android:layout_width="match_parent"
     6     android:layout_height="match_parent"
     7     android:id="@+id/scrollview_new_from_history_menu"
     8     >
     9     
    10      <!-- android:fillViewport="true" -->
    11     
    12     <RelativeLayout 
    13         android:layout_width="match_parent"
    14         android:layout_height="match_parent" 
    15         android:id="@+id/relativeLayout_new_from_history_menu"
    16         android:background="@drawable/blackboard">
    17         />
    18             
    19     </RelativeLayout>
    20     
    21 
    22     
    23 </com.clientMenu.CustomScrollView>

    1、在一个自定义的scrollView中加入一个相对布局

    2、在程序跑起来的时候,又动态创建几个EditText

    3、而且这几个输入框是支持拖拽的

    现在问题来了,当我把输入框控件拖动到一个位置后,如果去编辑另一个输入框,那么当输入法弹出的时候,整个布局便又恢复移动前的样子,见下边的图:

    1、初始时的截图

    2、现在移动“西红柿牛腩饭”到另一个位置

    3、当编辑“西红柿牛腩饭”的价格“24元”的时候,“西红柿牛腩饭”又回到之前的位置

    那么为什么会出现这样的问题呢?我想了很久,把问题定位在以下几个点:

    1、scrollView中对输入法的响应过程

    2、输入法弹出的具体过程对布局的影响

    3、activity中控件是如何显示在屏幕的

    那么为什么要加入一个自定义的scrollView呢?一是为了在弹出输入法的时候,底部的控件不被输入法遮住;二是为了能够自由控制scrollView可否滚动。

    输入法弹出是怎样一个过程呢?查了stackOverflow和google开发者文档都没有特别描述这个过程的。

    接下来,我把重点放在了绘制布局的过程。在官网13.2节中是这样的解释的:

    绘制布局又两个遍历过程组成:测量过程和布局过程

    测量过程是由measure(int,int )方法来完成,该方法从上到下遍历视图树。在递归遍历中,每个视图都会向下层传递尺寸和规格。当measure方法遍历结束时,每个视图都保存了各自的尺寸信息

    布局过程是由layout(int,int,int,int)方法完成,该方法也是由上而下遍历视图数,在遍历过程中,每个父视图通过测量过程的结果定位所有子视图的位置信息。

    时隔一周再更新一下。

    之前的方案都没有行的通,因为通过layout改变尺寸和位置信息后,没有找到通知父布局它的尺寸改变信息,所以我选用了另一种方案:通过弹出窗口(contextMenu)来修改文字内容

    通过这张截图,可以看到输入法弹出的时候,没有改变scrollview的布局,所以就对整个relativeLayout的布局没有影响,在此基础上进行文字修改即可。

    总结一下:

    1、一种思维模式解决不了问题,要去换另一种思维模式来解决

    2、多总结,举一反三。

  • 相关阅读:
    在MAC系统的eclipse里打开android sdk manager
    在MAC上搭建eclipse+android开发环境以及eclipse的svn插件的安装
    C语言入门
    变量和数据类型
    兼容 FF&IE 的替换鼠标选择文字方法(转载)
    JavaScript 中在光标处插入添加文本标签节点 详细方法
    jquery获取鼠标位置
    转:javascript Range对象跨浏览器常用操作
    日省三思
    jQuery强大的jQuery选择器 (详解)[转]
  • 原文地址:https://www.cnblogs.com/kunyashaw/p/4166441.html
Copyright © 2011-2022 走看看