windowSoftInputMode注意;onWindowFocusChanged重要作用。

本文详细介绍了Android中如何通过windowSoftInputMode属性管理软键盘的显示与隐藏,以及如何利用onWindowFocusChanged方法正确获取视图尺寸。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、windowSoftInputMode的取值及意义。

      输入框和软键盘的交互,避免输入法挡住输入框。

      <activity android:windowSoftInputMode="stateVisible|adjustResize" >

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

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

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

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

   5:stateVisible:软键盘通常是可见的

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

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

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

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


    我们的需求往往是这样的:软键盘弹出,标题不动,视图向上移动。

    这时我们在Mainfest.xml文件中这样配置。

    <activity android:windowSoftInputMode="stateVisible|adjustResize" >

    是不起作用的,这时我们把adjustResize修改为adjustPan。视图会整体上移(包括标题栏),这并不是我们想要的。

    解决方法:把标题下视图包在ScrollView(可滑动视图)中Mainfest.xml中不变,就可以达到我们想要的效果。

 

2、onWindowFocusChanged

       有的时候我们想在视图可见后获取一个view的getWidth() getHeight() 方法来获取该view的宽和高,返回的值却为0。   是因为view还没有被加载Rootview中。解决这个问题   有很多方法。这里可以重写onWindowFocusChanged方法,在这里获取view的getWidth() getHeight()。               

    相关执行打印:
    1: entry: onStart---->onResume---->onAttachedToWindow----------->onWindowVisibilityChanged--visibility=0---------->onWindowFocusChanged(true)------->

    2. exit:  onPause---->onStop---->onWindowFocusChanged(false)  ---------------------- (lockscreen)

    3. exit : onPause----->onWindowFocusChanged(false)-------->onWindowVisibilityChanged--visibility=8------------>onStop(to another activity)








    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值