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)