您的位置:首页 > 其它

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

2016-04-14 21:16 387 查看
今天在做项目的过程中,需要弹出一个提示框 输入账号 密码, 以前做过 类似功能,没在意,就随便用 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可点击的问题的

这样子 就完成了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: