Android 自定义AlertDialog对话框样式

实际的项目开发当中,经常需要根据实际的需求来自定义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对话框,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言!

时间: 2024-10-22 17:25:14

Android 自定义AlertDialog对话框样式的相关文章

android自定义AlertDialog对话框

前面一篇文章http://www.jb51.net/article/103036.htm介绍了alertDialog的四种简单使用,但是有些时候为了让整个app的风格统一,或者说前面的四种形式不符合项目中的需求,这个时候就需要我们自定义alertDialog了.直接上代码 CustomAlertDialog: import android.app.Dialog; import android.content.Context; import android.os.Bundle; import an

简析Android多种AlertDialog对话框效果_Android

android提供了四类常用的对话框,本文分享具体实现方法: 1.AlertDialog,功能最丰富,实际运用最广泛 2.progressDialog,进度条对话框 3.DatePickerDialog,日期选择对话框 4.TimePickerDialog,时间选择对话框 这里主要介绍第一种,剩下的三种都是第一种的子类,所以其方法,都可以直接使用. 创建一个对话框一般需要下面几个步骤 1.创建AlertDialog.Builder对象 2.对AlertDialog.Builder通过SetTit

Android自定义等待对话框_Android

最近,看了好多的APP的等待对话框,发现自己的太lower,于是就研究了一番,最后经过苦心努力,实现一个. 自定义一个LoadingIndicatorView(extends View )类 编写values/attrs.xml,在其中编写styleable和item等标签元素 在布局文件中LoadingIndicatorView使用自定义的属性(注意namespace) 在LoadingIndicatorView的构造方法中通过TypedArray获取 描述就提供这些,一下是代码的展示,非常的

简析Android多种AlertDialog对话框效果

android提供了四类常用的对话框,本文分享具体实现方法: 1.AlertDialog,功能最丰富,实际运用最广泛 2.progressDialog,进度条对话框 3.DatePickerDialog,日期选择对话框 4.TimePickerDialog,时间选择对话框 这里主要介绍第一种,剩下的三种都是第一种的子类,所以其方法,都可以直接使用. 创建一个对话框一般需要下面几个步骤 1.创建AlertDialog.Builder对象 2.对AlertDialog.Builder通过SetTit

【Android】Android中AlertDialog对话框的使用实例

package com.ceac.deng; import android.R.string; import android.support.v7.app.ActionBarActivity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.os.Bundle; import android.

Android自定义等待对话框

最近,看了好多的APP的等待对话框,发现自己的太lower,于是就研究了一番,最后经过苦心努力,实现一个. 自定义一个LoadingIndicatorView(extends View )类 编写values/attrs.xml,在其中编写styleable和item等标签元素 在布局文件中LoadingIndicatorView使用自定义的属性(注意namespace) 在LoadingIndicatorView的构造方法中通过TypedArray获取 描述就提供这些,一下是代码的展示,非常的

Android如何自定义升级对话框示例详解

前言 本文主要给大家介绍了关于Android自定义升级对话框的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现的效果如下所示 其实这也只是一个DialogFragment 而已,重点只是在于界面的设计 想要使用做出这样一个DialogFragment ,需要自定义一个View,然后将该View传入到该Dialog中 先定义布局,一个TextView用于标题,一个TextView用于升级内容阐述,一个ImageView,一个确认升级的按钮 <?xml version

【Android】请问如何去除自定义AlertDialog的背景?

问题描述 [Android]请问如何去除自定义AlertDialog的背景? Activity public void onSchulteButtonClick(View v) { LayoutInflater inflater = LayoutInflater.from(this); View SchulteSelectView = inflater.inflate( R.layout.activity_schulte_select_dialog, null); AlertDialog.Bui

android spinner列表框样式

问题描述 android spinner列表框样式 在不重写spinner的情况下,如何让spinner的下拉列表中item的高度增加或者设为40dp., 解决方案 用Adapter做适配,添加不同的Item布局. 解决方案二: android自定义Spinner下拉列表框样式android自定义Spinner下拉菜单(下拉列表框)样式android自定义Spinner下拉菜单(下拉列表框)样式