AlertDialog 自定义布局 以及 EditText 无法弹出软键盘的解决

今天在做项目的过程中,需要弹出一个提示框 输入账号 密码, 以前做过 类似功能,没在意,就随便用 AlertDialog写了写,然后就出现了问题(很好奇以前为什么没发现??),问题在于自定义的AlertDialog布局中有EditText控件,点无法弹出软键盘,导致根本无法输入。。


接下来就先介绍下如何自定义AlertDialog布局吧

第一步:写一个mydialog.xml布局 文件    在里面随便写自己想要的布局   例如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:orientation="vertical"
    android:background="@drawable/radius_5"
    >
    <TextView
        android:gravity="center"
        android:layout_width="230dp"
        android:layout_height="35dp"
        android:text="需要管理员权限"
        android:textSize="17sp"
        android:textColor="@android:color/white"
        android:background="@drawable/radius_5_blue"
        />
    <EditText
        android:id="@+id/edit_username"
        style="@style/login_edit2"
        android:layout_marginBottom="5dp"
        android:drawableLeft="@mipmap/icon_login_username"
        android:hint="@string/hint_manager_id" />
    <EditText
        android:id="@+id/edit_psw"
        android:inputType="textPassword"
        style="@style/login_edit2"
        android:drawableLeft="@mipmap/icon_login_psw"
        android:hint="@string/hint_manager_psw" />
    <LinearLayout
        android:layout_width="230dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/bt_enter"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:text="@string/txt_enter"
            android:layout_marginTop="5dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="5dp"
            android:textColor="@android:color/white"
            android:textSize="16sp"
            android:background="@drawable/sel_bt_login"
            android:textStyle="bold"
            />
        <Button
            android:id="@+id/bt_cancle"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:text="@string/txt_cancle"
            android:layout_marginTop="5dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="20dp"
            android:textColor="@android:color/white"
            android:textSize="16sp"
            android:background="@drawable/sel_bt_login"
            android:textStyle="bold"
            />

    </LinearLayout>
</LinearLayout>


第二步:定义AlertDialog的theme  这点对于 Dialog 和 PragressBar  等类似控件都是差不多的    例如:

<!-- 管理员id 密码 dialog 样式-->
    <style name="DialogTheme2">
        <item name="android:windowFrame">@null</item>
        <!--  -->
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

对于dialog的样式解释 如下  

<item name="android:windowFrame">@null</item> :Dialog的windowFrame框为无
<item name="android:windowIsFloating">true</item>:是否浮现在activity之上
<item name="android:windowIsTranslucent">false</item>:是否半透明
<item name="android:windowNoTitle">true</item>:是否显示title
<item name="android:windowBackground">@drawable/dia_bg</item>:设置dialog的背景
<item name="android:backgroundDimEnabled">false</item>: 背景是否模糊显示

第三步: 定义AlertDialog 控件 设置 布局 和主题 显示即可

 AlertDialog dialog = new AlertDialog.Builder(getActivity(),R.style.DialogTheme2).create();

                    dialog.show();
                    dialog.getWindow().setContentView(R.layout.my_dialog_psw);
                    dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
                    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
注意最后两句 就是这两句可以解决EditText可点击的问题的


这样子 就完成了


你可能感兴趣的:(AlertDialog 自定义布局 以及 EditText 无法弹出软键盘的解决)