当前位置: 移动技术网 > IT编程>移动开发>Android > Android 自定义AlertDialog对话框样式

Android 自定义AlertDialog对话框样式

2019年07月24日  | 移动技术网IT编程  | 我要评论

dnf灵介质,宝宝爹地难搞定,人代会召开时间

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

效果图

点击首页的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 后,在弹出框中点击 edittext 弹不出键盘来进行输入,故这里要用 this.getwindow().clearflags(windowmanager.layoutparams.flag_alt_focusable_im) 保证键盘能弹出以用来输入密码

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能弹出键盘
    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,设置点击事件,弹出对话框。

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对话框,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网