Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 400|回复: 0

Android中如何解决输入法键盘和activity页面遮挡的问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-5-24 03:36:41 | 显示全部楼层 |阅读模式

    不希望遮挡设置activity属性android:windowSoftInputMode="adjustPan"

    希望动态调整高度android:windowSoftInputMode="adjustResize"

     

    问题:

    我原来的问题是,对于腾讯微博的OAuth验证webView,弹出软键盘后,输入框上移就看不到输入框了,后发现Webview放到了ScrollView中,将ScrollView改为LinearLayout问题解决了,不会在弹出软键盘后大幅滚动。不过下面还是详细介绍下软键盘和activity页面遮挡的问题。

     

    详细:

    通常情况下如果我们在一个输入框输入内容,输入法键盘弹出时,activity自动设置高度,相当于在activity向上滚动了添加了输入法键盘的高度。但有时可能淹没当前的输入框,如果希望输入法键盘弹出时不自动向上挤压activity,在activty中设置属性android:windowSoftInputMode="adjustPan",这样输入法可以覆盖Activity显示,如下:

    1. <activity android:name="testActivity"  
    2.       android:windowSoftInputMode="adjustPan">  

    设置属性为android:windowSoftInputMode="adjustResize"即可自动调整高度。

    属性stateVisible表示默认显示输入法键盘,其他属性见:android:windowSoftInputMode

     

    adjustPan同样存在问题,即可能需要关闭软键盘,定位被挡住的输入框,我希望的是介于adjustPan和adjustResize之间的解决方案,即软键盘会对activity有一定挤压,但是焦点所在输入框始终会显示在屏幕上,有会的朋友欢迎留言分享,个人觉得可能的解决方案是new一个LinearLayout,重写其中的

    1. protected void onSizeChanged(int w, int h, int oldw, int oldh)  

    方法,使得h参数动态变化达到效果,但较耗时,暂不想尝试了。

     

    android:windowSoftInputMode

    activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。

    这个属性能影响两件事情:

    【一】当有焦点产生时,软键盘是隐藏还是显示

    【二】是否减少活动主窗口大小以便腾出空间放软键盘

    它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果。各个值之间用|分开。例如:<activity android:windowSoftInputMode="stateVisible|adjustResize". . . >

    在这设置的值(除"stateUnspecified"和"adjustUnspecified"以外)将覆盖在主题中设置的值

    各值的含义:

    【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置

    【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示

    【C】stateHidden:用户选择activity时,软键盘总是被隐藏

    【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的

    【E】stateVisible:软键盘通常是可见的

    【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态

    【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示

    【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间

    【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-12 01:49 , Processed in 0.060350 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表