本博文源于安卓基础对话框的实现。先讲理论后看实践。大家先可以看实践的效果,看到不懂的代码才回头看理论,加深理论的学习。知行合一方能做到知识有的放矢。
理论篇–Dialog类
对话框是提示用户做出决定或输入额外信息的小窗口,对话框不会填充屏幕。对话框是一个有边框和标题栏的、独立存在的容器,再应用程序中经常使用对话框组件来进行人机交互,用于需要用户采取行动才能继续执行的事件。
Android系统提供了丰富的对话框功能。Dialog是所有对话框的基类,AlertDialog是Dialog的直接派生类。
消息对话框
消息对话框(AlertDialog)是应用程序设计中最常用的对话框之一。AlertDialog的内容很丰富,可以放置标题、消息和3个按钮。使用它可以创建普通对话框、带列表的对话框,以及带单选按钮和复选框的对话框。AlertDialog的常用方法如表
方法 | 说明 |
---|---|
AlertDialog.Builder(Context) | 对话框Builder对象的构造方法 |
create() | 创建AlertDialog对象 |
setTitle() | 设置对话框标题 |
setIcon() | 设置对话框图标 |
setMessage() | 设置对话框的消息 |
setItems() | 设置对话框要显示的一个列表 |
setPositiveButton() | 在对话框中添加肯定按钮 |
setNegativeButton() | 在对话框中添加否定按钮 |
show() | 显示对话框 |
dismiss() | 关闭对话框 |
创建AlertDialog对象需要使用AlertDialog的内部类Builder,设计AlertDialog的步骤如下。
(1)用AlertDialog.Builder类创建对话框Builder对象
Builder dialog = new AlertDialog.Builder(Context);
(2)设置对话框的标题、图标、提示信息内容、按钮等
dialog.setTitle("普通对话框")
dialog.setIcom(R.drawable.icon1);
dialog.setMessage("一个简单的提示对话框");
dialog.setPositiveButton("确定",new okClick());
(3)创建并显示AlertDialog对话框对象。
dialog.create();
dialog.show();
其他常用对话框
AlertDialog对话框是最重要的对话框,有多种表现形式、包括列表对话框、单选对话框、多选对话框、进度条对话框(ProgressDialog)、时间对话框(DatePickerDialog和TimePickerDIalog)、自定义布局对话框等形式。其中时间对话框带有允许用户选择日期或时间的预定义界面。
进度条对话框
PressDialog类继承于AlertDialog,综合了进度条与对话框的特点,使用起来非常简单。ProgressDialog的常用方法如表所示:
方法 | 说明 |
---|---|
getMax() | 获取对话框进度的最大值 |
getProgress() | 获取对话框当前进度值 |
onStart() | 开始调用对话框 |
setMax(int max) | 设置对话框进度的最大值 |
setMessage(CharSequence message) | 设置对话框的消息 |
setProgress(int vlaue) | 设置对话框当前进度 |
show(COntext context,CharSequence title,CharSequence message) | 设置对话框的标题和消息 |
ProgressDialog(Context context) | 对话框的构造方法 |
应用篇–实现用户登录对话框
测试效果
点击普通对话框,弹出最平常的对话框,点击输入对话框,可以输入对话框,其中对话框的内容可以自由输入。在这里密码只要为admin就可以登录,否则就是登陆失败。
制作步骤
创建新项目 My servenApp
点进Project—>Empty Activity—>然后名字改下,finish即可。成功之后,点击箭头运行程序。
程序正常可以跑成功hello world字样,下面我们继续
上传资源到drawable
将此图另存为“xx.gif"
拖到drawable,ok后,我们基础图片有了
布局主界面activity_main.xml
这个是主界面搭建的源码,下面部分会对他细致讲解
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id = "@+id/button1"
android:text="打开普通对话框"
android:textSize="24sp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id = "@+id/button2"
android:text="打开输入对话框"
android:textSize="24sp"/>
</LinearLayout>
LinearLayout详解
线性布局作为根元素,设置width与height,方向为垂直。
Button详解
两个按钮作为响应事件width与height。id一定要设置,为了变得更加友好。text也要设置,textSize只是为了更美观。
创建空类 搭建次要界面
次要界面就是实现对话框的弹出。这也就是用户登录对话框,后续java代码会对此进行相应事件配置。
右击app文件夹。箭头操作!将其命名为DialogActivity
布局对话框界面的xml
也就是次界面的布局,主要实现用户登录对话框的界面。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"
android:id="@+id/user"
android:textSize="18sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"
android:id="@+id/textView"
android:textSize="18sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/paswdEdit"/>
</LinearLayout>
LinearLayout详解
简单的height与width设置,方向设置为垂直
TextView详解
也就是我们看到的用户名和密码这两个显示内容,不可编辑所以TextView。
EditText详解
id一定要设置,方便后面操作!
编辑主界面java代码
也就是两个按钮的代码,用户点击进行相应。
package com.example.myapplication;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
public class DialogActivity extends Activity implements View.OnClickListener {
Button btn1,btn2;
LinearLayout login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
public void onClick(View arg0) {
AlertDialog.Builder dialog = new AlertDialog.Builder(DialogActivity.this);
if(arg0==btn1)
{
dialog.setTitle("警告");
dialog.setIcon(R.drawable.xx);
dialog.setMessage("本项操作可能导致信息泄露!");
dialog.setPositiveButton("确定",new okClick());
dialog.create();
dialog.show();
}
else if(arg0==btn2)
{
login = (LinearLayout)getLayoutInflater().inflate(R.layout.login,null);
dialog.setTitle("用户登录").setMessage("请输入用户名和密码").setView(login);
dialog.setPositiveButton("确定",new loginClick());
dialog.setIcon(R.drawable.xx);
dialog.create();
dialog.show();
}
}
class okClick implements DialogInterface.OnClickListener {
@Override
public void onClick(DialogInterface dialog,int which)
{
dialog.cancel();
}
}
class loginClick implements DialogInterface.OnClickListener{
EditText txt;
@Override
public void onClick(DialogInterface dialog,int which)
{
txt = (EditText)login.findViewById(R.id.paswdEdit);
if((txt.getText().toString()).equals("admin"))
Toast.makeText(getApplicationContext(),"登录成功",Toast.LENGTH_SHORT).show();
else
Toast.makeText(getApplicationContext(),"密码错误",Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}
class exitClick implements DialogInterface.OnClickListener {
@Override
public void onClick(DialogInterface dialog,int which)
{
DialogActivity.this.finish();
}
}
}
主界面代码看起来非常复杂,其实本身内容非常灵清。分为两种。第一种激活控件,将id一一get,这是第一种。第二种就是对用户所点击地进行相应事件的编辑。主要采用java的复写思想。然后在第二种用户登录对话框需要创建和显示对话框。我们还做了单击事件也要注意!
点击运行
程序运行点击绿色按钮
测试效果
总结
代码得以运行主要有以下步骤
- 创建项目,跑成功hello world
- 上传资源文件到drawable
- 布局主界面两个按钮
- 创建空类作为对话框
- 布局对话框xml文件
- 配置主界面事件相应的代码
- 成功运行,收获喜悦!
很高兴博文能帮助到大家!一些文件名的修改也要思考的。如果大家文件名有问题,可以参考博主做这个实验的目录,仅供参考!
集成的mainfest默认是MainActivity.java要考虑到哟!