Android 自定义AlertDialog对话框样式

Android 自定义AlertDialog对话框样式,第1张

概述实际的项目开发当中,经常需要根据实际的需求来自定义AlertDialog。最近在开发一个WIFI连接的功能,点击WIFI需要d出自定义密码输入框。在此权当记录

实际的项目开发当中,经常需要根据实际的需求来自定义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对话框样式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存