时间:2021-05-21
实际的项目开发当中,经常需要根据实际的需求来自定义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对话框,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Android编程实现AlertDialog自定义弹出对话框的方法。分享给大家供大家参考,具体如下:弹出对话框,显示自定义的布局文件弹出对话框提示
Android有自带的对话框标题,但是不太美观,如果要给弹出的对话框设置一个自定义的标题,使用AlertDialog.Builder的setCustomTitl
常用的Dialog有确认对话框,单选按钮对话框,多选按钮对话框,复选按钮对话框另外还有自定义的对话框AlertDialog的常用方法setTitle:为对话框设
前言最近开发中用到许多对话框,之前都是在外面的代码中创建AlertDialog并设置自定义布局实现常见的对话框,诸如更新提示等含有取消和删除两个按钮的对话框我们
本文实例讲述了Android实现可使用自定义透明Dialog样式的Activity。分享给大家供大家参考,具体如下:有时你需要一个对话框,但同时对话框中的内容有