如何在键盘显示上调整AlertDialog的大小

San*_*anj 32 android resize view android-softkeyboard android-alertdialog

我有一个AlertDialog大约有10个控件(文本和TextView)的盒子.这些控件是在ScrollViewAlertDialog,再加上我有2个按钮正面和负面的.我遇到的问题是当弹出软键盘时,两个按钮隐藏在键盘后面.

我在内部视图或对话框中寻找重绘功能.下面是我正在谈论的屏幕截图.

在此输入图像描述

nmr*_*nmr 101

如果您的对话框是使用其中一个Dialog主题的活动,则可以通过设置活动参数的adjustResize标志来实现此行为windowSoftInputMode.

我正在使用:

android:windowSoftInputMode="adjustResize|stateHidden"
Run Code Online (Sandbox Code Playgroud)

我认为你仍然可以使用这个标志与常规对话框,但我不知道如何应用它.您可能必须使用自定义主题创建AlertDialog,该主题继承正确的父主题并设置该标志,或者您可能必须使用ContextThemeWrappers和东西.

或者你可以只使用Window#setSoftInputMode.

alertDialog.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Run Code Online (Sandbox Code Playgroud)

  • 最后一行对我有用,理想情况下我认为这是问题,这是正确的答案.所选答案更多的是设计变更建议,而不是正确答案.答案为+1 (9认同)
  • 如果你有一个自定义样式,你也可以使它成为样式定义的一个元素`<style name ="Theme.MyDialog"parent ="@ android:style/Theme.Dialog"> <item name ="android:windowSoftInputMode" > adjustResize | stateHidden </项目> </作风>` (6认同)

小智 16

我找到了解决这个问题的最佳方法.因为这是一个对话框,所以代码

alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Run Code Online (Sandbox Code Playgroud)

效果不好.

除此代码外,还必须为此对话框设置对话框样式.风格如下:

<style name="DialogStyle" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen">
    <item name="android:windowFullscreen">false</item>
    ......
    ......
</style>
Run Code Online (Sandbox Code Playgroud)

注意,属性parentTheme.Black.NoTitleBar.Fullscreen就像一个活动的风格.而属性android:windowFullScreen应该是false.

现在,当软键盘切换时,对话框将调整大小.