欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 自定义AlertDialog对话框样式

程序员文章站 2023-12-19 19:33:10
实际的项目开发当中,经常需要根据实际的需求来自定义alertdialog。最近在开发一个wifi连接的功能,点击wifi需要弹出自定义密码输入框。在此权当记录 效果图...

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

效果图

Android 自定义AlertDialog对话框样式

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

上一篇:

下一篇: