3-5设计两种形式的对话框程序,一种是发出提示信息的普通对话框,另一种是用户登录对话框
(1)设计界面布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn1"
android:text="打开普通对话框"
android:textSize="20sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn2"
android:text="打开输入对话框"
android:textSize="20sp"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
(2)设计登录对话框的界面布局文件login.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="用户名:"
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:textSize="18sp" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/paswdEdit" />
</LinearLayout>
(3)设计控制文件MainActivity.java
package com.example.ex35;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button btn1,btn2;
LinearLayout login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(Button)findViewById(R.id.btn1);
btn2=(Button)findViewById(R.id.btn2);
btn1.setOnClickListener(new mClick());
btn2.setOnClickListener(new mClick());
}
class mClick implements View.OnClickListener
{
AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
@Override
public void onClick(View arg0)
{
if(arg0 == btn1)
{
dialog.setTitle("警告");
dialog.setIcon(R.drawable.ic_launcher_foreground);
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.setNegativeButton("退出", new exitClick());
dialog.setIcon(R.drawable.ic_launcher_foreground);
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)
{
MainActivity.this.finish();
}
}
}
(4)结果运行图
(5)在写这个程序时出了点问题,在点击“打开输入框按钮”按钮时,一直闪退,最后发现是因为在login.xml文件中我使用了Android Studio的默认布局代码,默认代码的layout属性都是match_parent,而我需要的登录页面是弹出一个对话框登录,所以出错。最后把默认代码改为现在的代码便能运行。
3-6进度及日期、时间对话框示例,并显示日期及时间。
(1)设计界面布局文件activity_main
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn1"
android:text="进度对话框"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn2"
android:text="日期对话框"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn3"
android:text="时间对话框"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:id="@+id/txt"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
(2)设计控制文件MainActivity.java
package com.example.computer;
import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
public class MainActivity extends AppCompatActivity {
Button btn1,btn2,btn3;
TextView txt;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(Button)findViewById(R.id.btn1);
btn2=(Button)findViewById(R.id.btn2);
btn3=(Button)findViewById(R.id.btn3);
txt=(TextView)findViewById(R.id.txt);
btn1.setOnClickListener(new mClick());
btn2.setOnClickListener(new mClick());
btn3.setOnClickListener(new mClick());
}
class mClick implements View.OnClickListener{
int myear=2019;
int mmonth=3;
int mday=28;
int mhour=21, mminute=47;
@Override
public void onClick(View v) {
if(v==btn1)
{
ProgressDialog d=new ProgressDialog(MainActivity.this);
d.setTitle("进度对话框");
d.setIndeterminate(true);
d.setMessage("程序正在Loading......");
d.setCancelable(true);
d.setMax(10);
d.show();
}
else if(v==btn2)
{
DatePickerDialog.OnDateSetListener dateListener=new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
myear=year;
mmonth=month;
mday=dayOfMonth;
}
};
DatePickerDialog date=new DatePickerDialog(MainActivity.this,dateListener,myear,mmonth,mday);
date.setTitle("日期对话框");
date.show();
}
else if (v==btn3)
{
TimePickerDialog.OnTimeSetListener timeListener= new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mhour=hourOfDay;
mminute=minute;
}
};
TimePickerDialog d=new TimePickerDialog(MainActivity.this,timeListener,mhour,mminute,true);
d.setTitle("时间对话框");
d.show();
}
txt.setText("今天是"+myear+"年"+mmonth+"月"+mday+"日"+",现在是"+mhour+"时"+mminute+"分");
}
}
}
(3)结果运行图