Android 软键盘遮挡Dialog

工作中发现在AlertDialog中加入EditText后,Android 4.4 ,SDK19 或以下的手机,软键盘弹出后会遮挡Dialog中的按钮,而5.1的手机Dialog会自动向上移动一些。



首先遇到不会的先上网查查吧


网上有一些方案,

Window window = dialog.getWindow();
if (window != null) {
    window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
}

跑了一下,没效果,也许是没用对地方吧,还有一些别的方案,试了试都没效果,自己想办法吧


经过一番研究,发现直接在构造Dialog时加上Theme,在Theme里设置软键盘弹出方案 就可以了

第一步:创建theme:

在styles.xml文件写

<style name="dialog_soft_input" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:windowSoftInputMode">stateVisible|adjustPan</item>
</style>

第二步:写一个需要的EditText layout文件 edittext.xml

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/frame_gray"
    android:gravity="top"
    android:maxLength="500"
    android:padding="8dp"
    android:textSize="13sp" />

第三步:用style构造AlertDialog,然后把自己的EditText加进去,加自己的操作然后show就好了

    final EditText editText = (EditText) LayoutInflater.from(this).inflate(R.layout.edittext, null);
    AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog_soft_input).setView(editText);
    builder.setTitle("标题")
        .setPositiveButton(R.string.sure, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
		// do something
            }
        })
        .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
    builder.show();


全部代码: http://download.csdn.net/download/suihs11/10041710

https://github.com/suihs11/SoftInputAlertDialog



  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值