设置 android:windowSoftInputMode="adjustPan" 时如何滚动布局?

2024-03-04

我的活动有一个顶部栏和一个底部栏。顶栏和底栏之间的空间我有一个线性布局,里面有几个编辑文本视图。因为我不希望每次软键盘出现时都调整布局大小,所以我在清单中为我的活动设置了 android:windowSoftInputMode="adjustPan" 。但是当软键盘打开时,我想向下滚动以选择另一个要输入的编辑文本,但它不允许我这样做。当我关闭软键盘时,我只能选择底部的编辑文本。这非常烦人和不方便。 我怎样才能让软键盘的滚动视图和平移模式很好地协同工作?

请帮帮我。非常感谢。


最后,我找到了解决我的问题的方法,所以我想分享给将来可能遇到同样问题的人。我的布局的简要描述如下:

<myRelativeLayout>
<topbar.../>
<myscrollView>
    <linearLayout>
        //all stuff controls:editview,textview,....
    </linearLayout>
</myscrollView>
<bottombar.../>

我创建自定义类myRelativeLayout扩展RelativeLayout

public class myRelativeLayout extends RelativeLayout{

public interface OnRelativeLayoutChangeListener {
    void onLayoutPushUp();
    void onLayoutPushDown();
}

private OnRelativeLayoutChangeListener layoutChangeListener;
public myRelativeLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    final int proposedheight = MeasureSpec.getSize(heightMeasureSpec);
    final int actualHeight = getHeight();

    if (actualHeight > proposedheight){
        // Keyboard is shown
        layoutChangeListener.onLayoutPushUp();
    } else if(actualHeight < proposedheight){
        // Keyboard is hidden
        layoutChangeListener.onLayoutPushDown();
    }       
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

public void setLayoutChangeListener(OnRelativeLayoutChangeListener layoutChangeListener) {
    this.layoutChangeListener = layoutChangeListener;
}

public OnRelativeLayoutChangeListener getLayoutChangeListener() {
    return layoutChangeListener;
}

}

在我的活动中,我只是为我的RelativeLayout设置setLayout ChangeListener,以在软键盘显示时隐藏底部栏,并在软键盘隐藏时显示底部栏:

myRlayout.setLayoutChangeListener(new OnRelativeLayoutChangeListener() {

        @Override
        public void onLayoutPushUp() {
            // TODO Auto-generated method stub
            myBottombar.setVisibility(View.GONE);//in my case i need to setVisibility(View.GONE) to bottombar in order for this bar is not displayed when softkeyboard show up.
        }

        @Override
        public void onLayoutPushDown() {
            // TODO Auto-generated method stub
            myBottombar.setVisibility(View.VISIBLE);// redisplay myBottombar when keyboard is closed.

        }
    });

不要忘记为活动设置 android:windowSoftInputMode="adjustResize" 。 希望这对遇到同样问题的人有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置 android:windowSoftInputMode="adjustPan" 时如何滚动布局? 的相关文章

随机推荐

  • R - 将 R 模型序列化为 JSON [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一些好的 R 包可以将预测模型和其他复杂对象与 JSON 相互转换 我从这个例子中得到了线性回归模
  • 如果下一个元素为空则隐藏该元素

    我有以下代码 h3 class hideIfDivEmpty title h3 div div 我想当 div 为空时隐藏 h3 元素 我愿意更改 html 结构 但 h3 必须位于 div 之外 因为它的内容是动态更改的 有没有办法在 C
  • 您可以从另一个线程访问 UI 元素吗? (未设置)

    我在 google here 上看到很多关于从另一个线程更新 UI 元素的线程 如果我只想获取复选框的值怎么办 我可以做到这一点而不需要做任何特别的事情吗 Edit 看来我得收回之前写的东西了 尝试了以下方法 添加了一个名为的文本框myTe
  • C++ 模板只是伪装的宏吗?

    我已经用 C 编程几年了 并且经常使用 STL 并且多次创建了自己的模板类来看看它是如何完成的 现在 我正在尝试将模板更深入地集成到我的面向对象设计中 一个挥之不去的想法不断浮现在我的脑海中 它们只是一个宏 真的 你可以使用 defines
  • 使用 Terraform 与 A​​zure VM 的 SSH 连接

    我已使用 Terraform 成功创建了一个 VM 作为 Azure 上资源组的一部分 下一步是在新机器中使用 ssh 并运行一些命令 为此 我创建了一个配置程序作为 VM 资源的一部分 并设置了 SSH 连接 resource azure
  • iPhone:显示带有导航栏的模态 UITableViewController

    我正在展示一个模态视图 它是UITableViewController班级 由于某种原因 当我显示导航栏时 它不会显示它 这是我的代码 SettingsCreateAccount detailViewController SettingsC
  • 使用 D3 设置下拉菜单的默认选择

    我创建了一个包含几个月的下拉菜单作为选项 但想预先指定一个选项作为默认值 然而 默认选择似乎顽固地保留在列表中的第一个选项 我尝试了下面的代码 这对我来说很有意义 因为对于任何其他属性 设置一个简单的比较就足以改变该属性的值 var def
  • 在名称为“appServlet”的 DispatcherServlet 中未找到带有 URI [/pms/j_spring_security_check] 的 HTTP 请求的映射

    我开发了一个 Spring 应用程序 并在其中实现了 Spring 安全集成到登录和注销功能 我使用 Spring security 和 xml 配置 但是当我登录系统时 它显示404 控制台告诉我 在名称为 appServlet 的 Di
  • 在同一个 Activity 中的两个 GridView 之间切换

    我一直在寻找如何解决几个问题 并得到了一些问题的答案 但有一件事仍在建设中 如果你们都不能帮助我 就不会完成 我一直在尝试放大和缩小 GridView 但转向了其他解决方案 因为我只需要两种状态 概述和详细视图 因此我制作了两个 Gridv
  • SF 符号分层、调色板和多色渲染模式颜色?

    在 WWDC 2021 上 Apple 宣布了 SF Symbols 3 它将在 iOS 15 和 macOS 12 中支持新的多色 SF Symbols 新的色彩渲染模式可通过图层注释增加符号的深度和强调 https developer
  • Vue 组合 API 使用 VueAxios?

    I am in main js输入vue axios main js import createApp from vue import axios from axios import VueAxios from vue axios impo
  • 你能让弹性盒子项扩展以适应父项而不是内容吗?

    我正在使用一个flexbox使 div 占据浏览器窗口中剩余的垂直空间 但我想防止它超出该范围 当其内容超出其垂直尺寸时 我希望滚动条显示在现在太小的 Flexbox 子项中 这可能吗 或者我应该使用其他一些布局技术吗 这是一个 JSFid
  • 闭包返回值(以前为completionBlock)

    我想在长期操作完成后返回一些值 但此外我想将逻辑和图形用户界面分开 例如 我有两节课 SomeServices swift 有一个名为 getDataFromService 的方法 MyTableViewController swift 将
  • 在 jQuery 中使用 FormData 提交表单 - 无需 Ajax 且无需隐藏字段

    我有一个函数 可以在表单提交上执行一些自定义工作 通过 Ajax 发送一些数据 将返回的数据附加到新的 FormData 对象中 现在我需要使用此 FormData 以常规方式 而不是通过 Ajax 提交表单 我知道它可以通过隐藏字段来实现
  • 如何检查 jpeg 是否适合内存?

    使用打开 JPEG 图像imagecreatefromjpeg很容易导致致命错误 因为所需的内存超过了memory limit A jpg小于 100Kb 的文件很容易超过 2000x2000 像素 打开时将占用大约 20 25MB 的内存
  • 如何在 Docker 容器中设置 PS1

    我想设置 PS1容器的环境变量 它帮助我识别多级或复杂的 Docker 环境设置 目前 docker 容器提示 root container id 如果我可以按如下方式更改它 我可以通过查看来识别容器 PS1提示本身 Level 1 roo
  • Spark - 写入Avro文件

    在如下流程中使用 Spark 使用 Scala API 编写 Avro 文件的常见做法是什么 从 HDFS 解析一些日志文件 对于每个日志文件应用一些业务逻辑并生成 Avro 文件 或者可能合并多个文件 将 Avro 文件写入 HDFS 我
  • 从oracle数据库获取唯一约束列名

    我正在从 UI 实现搜索功能 为此我想提供具有唯一约束的列名称下拉列表以及任何主键列 如果存在 以便用户可以使用任何这些选定的列相关数据进行搜索 我搜索过这样的查询但没有找到 就像是 SELECT COLUMN NAMEs FROM TAB
  • Android Listview 删除项目之间的任何空格

    我想删除 ListView 中不同项目之间的任何空格 代码
  • 设置 android:windowSoftInputMode="adjustPan" 时如何滚动布局?

    我的活动有一个顶部栏和一个底部栏 顶栏和底栏之间的空间我有一个线性布局 里面有几个编辑文本视图 因为我不希望每次软键盘出现时都调整布局大小 所以我在清单中为我的活动设置了 android windowSoftInputMode adjust