键盘的弹出模式可以通过设置windowSoftInputMode属性改变,总共有九种 这九种可以用|组合。
【1】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【2】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【3】stateHidden:用户选择activity时,软键盘总是被隐藏
【4】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【5】stateVisible:软键盘通常是可见的
【6】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【7】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【8】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【9】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
今天说的问题即adjustResize模式下dialog中出现的问题。正常情况下adjustResize的模式下
键盘出现后屏幕绘制应用和height会变小,即键盘不会遮住任何应用ui,应用ui会重新测量绘制。
但是偶然间发现dialog在设置为adjustResize模式后 键盘的出现不会让dialog的height变小即键盘仍然会遮住dialog下部分的ui。
解决方案设置dialog属性windowIsFloating为false。
这个时候部分手机可能引来另一个问题actionbar处会有一小条非透明白色背景。
解决方案设置dialog的statusBarColor为透明。
<style name="BaseDialog" parent="Base.Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary
<item name="colorPrimaryDark">@color/colorPrimaryDark
<item name="colorAccent">@color/colorAccent
<item name="android:windowBackground">@android:color/transparent
<item name="android:windowFrame">@null
<item name="android:windowContentOverlay">@null
<item name="android:backgroundDimEnabled">true
<item name="android:windowIsTranslucent">true
<item name="android:windowNoTitle">true
<item name="android:windowCloseOnTouchOutside">true
<item name="android:windowSoftInputMode">stateHidden|adjustResize
<item name="android:windowFullscreen">false
<item name="android:statusBarColor">@android:color/transparent
<item name="android:colorBackgroundCacheHint">@null
<item name="android:windowTitleStyle">@style/RtlOverlay.DialogWindowTitle.AppCompat
<item name="android:windowTitleBackgroundStyle">@style/Base.DialogWindowTitleBackground.AppCompat
<item name="android:windowIsFloating">false
<item name="android:windowAnimationStyle">@style/Animation.AppCompat.Dialog
<item name="windowActionBar">false
<item name="windowActionModeOverlay">true
<item name="listPreferredItemPaddingLeft">24dip
<item name="listPreferredItemPaddingRight">24dip
<item name="android:listDivider">@null
<item name="android:buttonBarStyle">@style/Widget.AppCompat.ButtonBar.AlertDialog
<item name="android:borderlessButtonStyle">@style/Widget.AppCompat.Button.Borderless
</style>