一、对话框(Dialog)
对话框就是程序与用户,或用户与程序进行人机交互。比如说当我们退出某个程序时会弹出是否退出的对话框等等。
代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageButton //定义一个图片按钮
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/one1">
</ImageButton>
</LinearLayout>
MainActivity.java文件的内容。
package com.example.dialog1;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.ImageButton;
public class MainActivity extends Activity {
private ImageButton but = null;//定义图片按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
but = (ImageButton)super.findViewById(R.id.image);//取得按钮
but.setOnClickListener(new OnClickListenerImpl());//设置监听器
}
private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MainActivity.this.back();//当点击图片按钮时跳到back()方法上。
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {//如果按下的是返回键
MainActivity.this.back();
}
return false;
}
private void back() {
Dialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("车辆选择")//创建标题
.setMessage("您确定要选择这辆车吗?")//表示对话框中的内容
.setIcon(R.drawable.car)//设置图标
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
MainActivity.this.finish();
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).create();//创建对话框
dialog.show();//显示对话框
}
}
1.1、单选钮对话框
代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView //设置文本组件以方便显示提示信息
android:id="@+id/showtxt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
<TextView
android:id="@+id/context"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
<Button
android:id="@+id/but"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txt1" />
</LinearLayout>
MainActivity.java文件内容。
package com.example.dialog2;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView text1 = null; //定义文本组件
private TextView text2 = null;
private Button but = null ; //定义按钮组件
private String[] carcontexts = new String[]{"该车采用轻量化设计,车身质量仅为1341kg,过弯时的过载可达到两个重力加速度",
"最高时速是350km/h","百公里加速只有6s,但是最高时速只有180km/h"}; //定义一个String类型的数组存储信息。
private String[] car = new String[]{"柯塞尼格 ONE1","兰博基尼Aventador LP-700-4","奔驰G63 AMG 6x6"}; //定义一个String类型的数组存储信息。
private int chnum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.text1 = (TextView)super.findViewById(R.id.showtxt);
this.text2 = (TextView)super.findViewById(R.id.context);
this.but = (Button)super.findViewById(R.id.but);
this.but.setOnClickListener(new OnClickListenerImpl()); //给按钮设置监听器
}
private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub</span>
//设置对话框
Dialog dialog = new AlertDialog.Builder(MainActivity.this)
.setIcon(R.drawable.car) //设置对话框的图标
.setTitle("请选择您最喜欢的车") //设置对话框的标题
//设置对话框中的按钮,并设置了监听器
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
MainActivity.this.text2.setText(MainActivity.this.carcontexts[chnum]);//当点击对话框中的"确定"按钮时做出设置文本组件显示内容的操作。
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).setSingleChoiceItems(MainActivity.this.car, 0, new DialogInterface.OnClickListener() //第一个参数的意思是从MainActivity.this.car中获得所有单选项,第二个参数的意思是单选项中的第一个被默认选中,第三个参数的意思是设置监听器(当点击的时候)
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
MainActivity.this.text1.setText(MainActivity.this.car[which]);
MainActivity.this.text2.setText("");
MainActivity.this.chnum = which;
}
}).create();//创建单选对话框
dialog.show();//显示单选对话框
}
}
}
1.2、多选对话框
代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView//设置文本组件
android:id="@+id/txt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""/>//默认不显示文字
<TextView
android:id="@+id/txt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""/>
<Button //设置按钮组件
android:id="@+id/but"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请选择你最喜欢的食物"
/>
</LinearLayout>
MainActivity.java文件的内容。
package com.example.dialog3;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView txt1 = null; //定义文本组件
private TextView txt2 = null; //定义文本组件
private Button but = null; //定义按钮组件
private String[] food = new String[] {"红烧肉","糖醋里脊","红烧排骨","狮子头"}; //定义一个字符串数组存储信息
private boolean[] checkedfood = new boolean[]{true,true,false,false};//定义一个布尔类型的数组存储默认选中项(true:选中,false:不选中)
private String[] contexts = new String[] {"好吃","美味","鲜嫩","味美多汁"}; //定义一个字符串数组存储信息
private int checkednum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
txt1 = (TextView)super.findViewById(R.id.txt1);//取得文本组件
txt2 = (TextView)super.findViewById(R.id.txt2);//取得文本组件
but = (Button)super.findViewById(R.id.but);//取得按钮组件
but.setOnClickListener(new OnClickListenerImpl());//给按钮设置监听器
}
private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//设置对话框
Dialog dialog = new AlertDialog.Builder(MainActivity.this)
.setIcon(R.drawable.food) //设置对话框图标
.setTitle("请选择你最喜欢的食物") //设置对话框标题
.setPositiveButton("确定", new DialogInterface.OnClickListener() { //当点击"确定"时程序所做出的反应
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
MainActivity.this.txt2.setText(txt1.getText());
MainActivity.this.txt1.setText("");
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
//当点击"取消"时程序所作出的反应
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).setMultiChoiceItems(MainActivity.this.food, MainActivity.this.checkedfood, new DialogInterface.OnMultiChoiceClickListener() //设置多选框。第一个参数:从 MainActivity.this.food中取得多选内容,第二个参数:在多选内容中默认选中项,第三个参数设置监听器 {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
for (int i = 0; i < MainActivity.this.food.length; i++){
if (i == which && isChecked) {
MainActivity.this.txt1.append(MainActivity.this.food[i] + "、");
}
}
}
}).create();
dialog.show();
}
}
}
1.3、定制对话框与(LayoutInflater)
定制对话框无非就是写一个新的布局文件,LayoutInflater的作用就是查找到res/layout/..xml文件,下面写一个定制的登录对话框说明。
代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/txt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
<Button
android:id="@+id/but"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"/>
</LinearLayout>
MainActivity.java文件的内容。
package com.example.dialog4;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button but = null;
private TextView txt1 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
but = (Button)super.findViewById(R.id.but);
txt1 = (TextView)super.findViewById(R.id.txt1);
but.setOnClickListener(new OnClickListenerImpl());//给按钮设置监听器
}
private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
<span style="white-space:pre"> </span>//从 MainActivity.this查找布局文件
LayoutInflater factory = LayoutInflater.from(MainActivity.this);
View V = factory.inflate(R.layout.login, null);//定义一个新视图
Dialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("用户登录")
.setPositiveButton("登录", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
final ProgressDialog pdl = ProgressDialog.show(MainActivity.this, "正在登录中", "请耐心等候"); //设置进度对话框
new Thread() {
public void run() {
try {
Thread.sleep(5000);//线程睡眠5s后继续执行程序
}catch (Exception {
}finally {
pdl.dismiss();
}
}
}.start();//启动进度框
pdl.show();//创建进度对话框
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
MainActivity.this.txt1.setText("您已取消了本次登录");
}
}).setView(V).create();//创建新视图
dialog.show();//显示对话框
}
}
}