DialogFrament是Android sdk中的对话框基类,开发人员可以针对此类进行扩展。他可以扩展出Android中的多种对话框,比如alertdialog,listdialog,radiodialog等。android已经为开发人员提供了简单的对话框,本篇要讲的是对话框的扩展部分。本例是根据sdk开发文档而来。
1.建立textdialog
在layout文件夹下面,建立textdialog的xml文档。在xml文档中,我们只定义了一个textview。
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical" >
6
7 <TextView
8 android:id="@+id/text"
9 android:layout_width="fill_parent"
10 android:layout_height="wrap_content" />
11
12 </LinearLayout>
2.建立textdialog类
在src中添加新类TextDialogFragment,该类需要继承DialogFragment,并需要实现它的一些方法,比如onCreate(),onCreateView()等。在类中主要是为textview设置需要显示的字段,以及设置dialog显示的样式和主题等。这里是对DialogFragment扩展的主要部分,我们可以再这里定义自己的方法,定义事件等。不如诗listdialog,需要定义适配器,需要定义itemclick。
1 public class TextDialogFramnet extends DialogFragment {
2
3 int mNum;
4
5 static TextDialogFramnet newInstance(int num)
6 {
7 TextDialogFramnet textdia=new TextDialogFramnet();
8 Bundle bundel=new Bundle();
9 bundel.putInt("name", num);
10 textdia.setArguments(bundel);
11 return textdia;
12 }
13 public void onCreate(Bundle saveInstanced)
14 {
15 super.onCreate(saveInstanced);
16 mNum=getArguments().getInt("name");
17 int style=DialogFragment.STYLE_NO_TITLE,theme=0;
18 switch((mNum-1)%6)
19 {
20 case 1:
21 style=DialogFragment.STYLE_NO_TITLE;
22 break;
23 case 2:
24 style=DialogFragment.STYLE_NO_FRAME;
25 case 3:
26 style = DialogFragment.STYLE_NO_INPUT;
27 break;
28 case 4:
29 style = DialogFragment.STYLE_NORMAL;
30 break;
31 case 5:
32 style = DialogFragment.STYLE_NORMAL;
33 break;
34 case 6:
35 style = DialogFragment.STYLE_NO_TITLE;
36 break;
37 case 7:
38 style = DialogFragment.STYLE_NO_FRAME;
39 break;
40 case 8:
41 style = DialogFragment.STYLE_NORMAL;
42 break;
43 }
44 switch((mNum-1)%6)
45 {
46 case 4:
47 theme=android.R.style.Theme_Holo; break;
48 case 5:
49 theme=android.R.style.Theme_Holo_Light_Dialog;
50 break;
51 case 6: theme = android.R.style.Theme_Holo_Light; break;
52 case 7: theme = android.R.style.Theme_Holo_Light_Panel; break;
53 case 8: theme = android.R.style.Theme_Holo_Light; break;
54 }
55 setStyle(style,theme);
56 }
57 public View onCreateView(LayoutInflater inflater,ViewGroup contaniner,Bundle savedInstance)
58 {
59 View v=inflater.inflate(R.layout.textdialog, contaniner,false);
60 TextView tv=(TextView)v.findViewById(R.id.text);
61 tv.setText("Dialog#"+mNum+":using style");
62 return v;
63
64 }
65 }
3.调用textdialog
在我们的activity中调用刚刚定义的对话框,首先需要对话框的实例化,然后根据对话框的需要,调用对话框的方法。最后是调用show()方法,显示该对话框。
1 void showDialog() {
2 mStackLevel++;
3
4 android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
5 android.app.Fragment prev = getFragmentManager().findFragmentByTag("dialog");
6 if (prev != null) {
7 ft.remove(prev);
8 }
9 ft.addToBackStack(null);
10
11 // Create and show the dialog.
12 DialogFragment newFragment = TextDialogFramnet.newInstance(mStackLevel);
13 newFragment.show(ft, "dialog");
14 }
4.alertDialog
alertdialog 是sdk封装好的一个对话框,我们可以直接调用的。需要注意的是,该类是静态的,无需实例化,可以直接调用。
1 new AlertDialog.Builder(MainActivity.this).setIcon(R.drawable.ic_launcher)
2 .setTitle("是否删除文件").setPositiveButton("确定", new DialogInterface.OnClickListener() {
3
4 @Override
5 public void onClick(DialogInterface dialog, int which) {
6 // TODO 自动生成的方法存根
7 new AlertDialog.Builder(MainActivity.this).setMessage("文件已经被删除").create().show();
8 }
9 })
10 .setNegativeButton("取消", new DialogInterface.OnClickListener() {
11
12 @Override
13 public void onClick(DialogInterface dialog, int which) {
14 // TODO 自动生成的方法存根
15 new AlertDialog.Builder(MainActivity.this).setMessage("您已经选择取消按钮,文件未删除").create().show();
16 }
17 })
18 .show();
该段代码实现了提示对话框,当我们删除的时候,可以弹出该对话框,并设置了setpositivebutton和setnegativebutton两个监听事件,分别对应确定和取消按钮。