今天在做项目的过程中,需要弹出一个提示框 输入账号 密码, 以前做过 类似功能,没在意,就随便用 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可点击的问题的
这样子 就完成了