【问题标题】:Android alertdialog not centered when keyboard opens键盘打开时Android警报对话框不居中
【发布时间】:2019-10-08 08:19:14
【问题描述】:

我有一个带有自定义视图的 AlertDialog,其中包含两个 EditText 字段。在某些时候,使用以下代码显示对话框:

val builder = AlertDialog.Builder(this)
    builder
     .setView(R.layout.dialog)
     .setMessage("message")
     .setPositiveButton("Oke"){ dialog, id -> println("oke")}
     .setNegativeButton("Cancel"){ dialog, id -> println("cancel")}

val dialog = builder.create()
    dialog.show()

当用户按下 EditText 时,SoftKeyboard 会显示,但 Dialog 并未上移。我已经尝试将 dialog.window 的 softinputmode 设置为 SOFT_INPUT_ADJUST_PAN 或 SOFT_INPUT_ADJUST_RESIZE 像这样。

dialog.window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)

但这似乎没有任何作用。

【问题讨论】:

  • 我刚刚使用您提供的代码创建了新项目,当显示键盘时,它对我来说似乎工作正常 - 对话框向上移动。可能由于某些 Activity/Fragment 设置或根布局,您的对话框未居中。

标签: android kotlin android-alertdialog


【解决方案1】:

显示 AlertDialog 的 Activity 有一个半透明的状态栏主题。

因此,您可以使用没有半透明状态栏的对话框主题,而不是使用使用上下文主题的经典 AlertDialog.Builder(this) 来初始化构建器:

val builder = AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar)

这个主题也确保了与棒棒糖之前的设备的兼容性,但像android.R.style.Theme_Material_Dialog 这样的其他主题也可以做到这一点。

【讨论】:

    【解决方案2】:

    试试这个:

    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
    

    【讨论】:

    • 对不起,我的错误在我的例子中犯了一个错误。忘记窗口部分了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多