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兩個監聽事件,分別對應確定和取消按鈕。