实际的项目开发当中,经常需要根据实际的需求来自定义AlertDialog。最近在开发一个WIFI连接的功能,点击WIFI需要d出自定义密码输入框。在此权当记录
效果图
点击首页的button即跳出对话框,显示WIFI信息(TextVIEw),密码输入框(EditText),取消和连接按钮(button)
实现
根据自己实际的需求,为AlertDialog创建一个布局,在此我需要定义一个如图所示的WIFI密码输入框,故在 res/layout 目录下建立一个 dialog_layout.xml 文件。
在该布局中,定义一个TextVIEw显示wifi名称,一条分割线,一个EditText用于密码输入,以及两个button用于取消与连接
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="300dp" androID:layout_height="180dp" androID:orIEntation="vertical"> <TextVIEw androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_margintop="15dp" androID:gravity="center" androID:text="WIFI" androID:textSize="18sp" /> <VIEw androID:layout_wIDth="match_parent" androID:layout_height="2dp" androID:layout_marginleft="20dp" androID:layout_marginRight="20dp" androID:layout_margintop="10dp" androID:background="#F5F5F5" /> <EditText androID:ID="@+ID/et_passwd" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_marginleft="20dp" androID:layout_marginRight="20dp" androID:layout_margintop="10dp" androID:focusable="true" androID:focusableIntouchMode="true" androID:hint="Password" androID:inputType="numberPassword" /> <linearLayout androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_margintop="10dp" androID:orIEntation="horizontal"> <button androID:ID="@+ID/btn_cancel" androID:layout_wIDth="0dp" androID:layout_height="wrap_content" androID:layout_weight="1" androID:background="@null" androID:text="取消" androID:textcolor="#1965db" androID:textSize="16sp" /> <button androID:ID="@+ID/btn_connect" androID:layout_wIDth="0dp" androID:layout_height="wrap_content" androID:layout_weight="1" androID:background="@null" androID:text="连接" androID:textcolor="#1965db" androID:textSize="16sp" /> </linearLayout></linearLayout>
新建 WifIDialog.java 继承 AlertDialog ,并引入刚刚所定义的 dialog_layout.xml 布局,并在这里做我们的逻辑 *** 作
声明构造方法,传入 Context
在 onCreate() 中加载布局,获取 VIEw,为按钮设置点击事件
这边尤其要注意一个问题,在 Dialog 中,定义 EditText 后,在d出框中点击 EditText d不出键盘来进行输入,故这里要用 this.getwindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
保证键盘能d出以用来输入密码
package com.example.test.dialogtest;import androID.app.AlertDialog;import androID.content.Context;import androID.os.Bundle;import androID.text.TextUtils;import androID.vIEw.VIEw;import androID.vIEw.WindowManager;import androID.Widget.button;import androID.Widget.EditText;import androID.Widget.Toast;/** * Created by AaronPasi on 2017/9/16. */public class WifIDialog extends AlertDialog implements VIEw.OnClickListener { EditText mEtPasswd; button mBtnCancel,mBtnConnect; Context mContext; public WifIDialog(Context context) { super(context); mContext = context; } @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.dialog_layout); mEtPasswd = (EditText) findVIEwByID(R.ID.et_passwd); //保证EditText能d出键盘 this.getwindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); this.setCancelable(false); mBtnCancel = (button) findVIEwByID(R.ID.btn_cancel); mBtnCancel.setonClickListener(this); mBtnConnect = (button) findVIEwByID(R.ID.btn_connect); mBtnConnect.setonClickListener(this); } @OverrIDe public voID onClick(VIEw vIEw) { switch (vIEw.getID()) { case R.ID.btn_cancel: this.dismiss(); break; case R.ID.btn_connect: if (TextUtils.isEmpty(mEtPasswd.getText())) { Toast.makeText(mContext,"密码不能为空",Toast.LENGTH_SHORT).show(); } else { this.dismiss(); Toast.makeText(mContext,mEtPasswd.getText().toString(),Toast.LENGTH_SHORT).show(); } break; default: break; } }}
调用的话就简单了,new 一个 WifIDialog对象,并调用 show() 方法即可。这里在 MainActivity 简单声明一个 button,设置点击事件,d出对话框。
package com.example.test.dialogtest;import androID.support.v7.app.AppCompatActivity;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.Widget.button;public class MainActivity extends AppCompatActivity implements VIEw.OnClickListener { private button mDialogBtn; private WifIDialog mDialog; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); mDialogBtn = (button) findVIEwByID(R.ID.btn_dialog); mDialogBtn.setonClickListener(this); } @OverrIDe public voID onClick(VIEw vIEw) { if (vIEw.getID() == R.ID.btn_dialog) { mDialog = new WifIDialog(this); mDialog.show(); } }}
总结
以上所述是小编给大家带来的AndroID 自定义AlertDialog对话框,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言!
总结以上是内存溢出为你收集整理的Android 自定义AlertDialog对话框样式全部内容,希望文章能够帮你解决Android 自定义AlertDialog对话框样式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)