Android簡單例子——AlertDialog,androidalertdialog
最近學習了一段時間的Android,在網上找了些小的Demo,自己類比這做了下,首先謝謝那些提供例子的朋友
今天主要學習的是簡單的Dialog的使用(實現退出對話方塊)和自訂對話方塊
1.實現退出對話方塊
普通模式的對話方塊使用比較簡單,主要是設定對話方塊標題、設定對話方塊內容、設定對話方塊中的按鈕,以及增加監聽事件,主要代碼如下
//普通樣式的對話方塊 btn2 = (Button) findViewById(R.id.btn2); btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub /**聲明一個Builder對象在當前Activity**/ AlertDialog.Builder ad = new Builder(MainActivity.this) ; /**設定標題**/ ad.setTitle("退出應用"); /**設定主題內容**/ ad.setMessage("是否退出應用?"); /**設定按鈕**/ ad.setPositiveButton("確認", new DialogInterface.OnClickListener() { /**按鈕增加監聽時間,關閉activity**/ public void onClick(DialogInterface dialog, int which) { MainActivity.this.finish(); System.exit(0); } } ); /**設定按鈕**/ ad.setNegativeButton("取消", new DialogInterface.OnClickListener() { /**設定取消監聽時間,關閉當前dilaog**/ public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); ad.create().show(); } });
2.自訂對話方塊
自訂對話方塊相對來說使用就複雜了,主要是為自訂的對話方塊設定樣式,在學習這個內容的時候,學會了selector的使用
Android中的Selector主要是用來改變ListView和Button控制項的預設背景
例如在這個demo中定義的兩個按鈕樣式
1.
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 1.android:state_focused:當控制項獲得焦點的時候 2.android:state_pressed:當控制項按下的時候 3.android:state_selected:當控制項選中的時候 --> <item android:drawable="@drawable/linkbtnbgedim" android:state_pressed="true"/> <item android:drawable="@drawable/linkbtnbg"/></selector>
2.
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/imgcanceled" android:state_pressed="true"/> <item android:drawable="@drawable/imgcancel"/></selector>
自訂對話方塊的樣式代碼
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- 頂部,使用相對布局,更容易方便才做 --> <RelativeLayout android:id="@+id/customviewlayTitle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#1A94F9" > <TextView android:id="@+id/customviewtvTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:padding="10dp" android:text="關於我們" android:textColor="#000000" /> <ImageButton android:id="@+id/customviewtvimgCancel" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="@drawable/canceltor" /> </RelativeLayout> <!-- 中間內容 --> <LinearLayout android:id="@+id/customviewlayMessage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_below="@id/customviewlayTitle" android:padding="20dp" > <TextView android:id="@+id/orthertv0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="作者:maozhanlei" android:textColor="#000000" /> <TextView android:id="@+id/orthertv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:linksClickable="true" android:text="部落格:http://www.cnblogs.com/qadada/" android:textColor="#000000" /> <TextView android:id="@+id/orthertv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:linksClickable="true" android:text="Email:mzl0819@gmail.com" android:textColor="#000000" /> </LinearLayout> <!-- 底部按鈕 --> <LinearLayout android:id="@+id/customviewlayLink" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/customviewlayMessage" android:orientation="horizontal" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingBottom="20dp"> <Button android:id="@+id/ortherbtnemil" android:layout_width="fill_parent" android:layout_height="40dp" android:background="@drawable/linkbtnbged" android:linksClickable="true" android:layout_weight="1" android:layout_marginRight="10dp" android:text="Email給作者" /> <Button android:id="@+id/ortherbtnweb" android:layout_width="fill_parent" android:layout_height="40dp" android:linksClickable="true" android:background="@drawable/linkbtnbged" android:text="訪問部落格" android:layout_marginLeft="10dp" android:layout_weight="1"/> </LinearLayout></RelativeLayout>
核心java代碼
/** * 點擊主介面按鈕點監聽 * */ private void onClickBtnListener() { Builder builder=myBuilder(MainActivity.this); /**調用Build的show方法設定為顯示,並返回一個AlertDialog對象**/ final AlertDialog dialog=builder.show(); /**點擊螢幕外側對話方塊是否顯示**/ dialog.setCanceledOnTouchOutside(false); /**點擊右側的按鈕關閉對話方塊**/ imageCloseDialog(dialog); sendEmailClickListener(dialog); openBlogListener(dialog); } /** * 訪問blog的監聽事件 * @param dialog */ private void openBlogListener(final AlertDialog dialog) { Button ortherbtnweb = (Button)customView.findViewById(R.id.ortherbtnweb); ortherbtnweb.setOnClickListener(new OnClickListener() { /* 點擊訪問部落格按鈕,訪問我的部落格網站 * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // TODO Auto-generated method stub Uri uri = Uri.parse("http://blog.csdn.net/asinzuo"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); dialog.dismiss(); } }); } /** * 發送郵件按鈕事件 * @param dialog */ private void sendEmailClickListener(final AlertDialog dialog) { Button ortherbtnemil = (Button) customView.findViewById(R.id.ortherbtnemil); ortherbtnemil.setOnClickListener(new OnClickListener() { /* 啟動發送郵件的服務 * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // TODO Auto-generated method stub Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain"); i.setType("message/rfc822") ; // 真機上使用這行 i.putExtra(Intent.EXTRA_EMAIL, new String[]{"asinzuo@qq.com"}); i.putExtra(Intent.EXTRA_SUBJECT,"windows風格dialog反饋"); i.putExtra(Intent.EXTRA_TEXT,"內容"); startActivity(Intent.createChooser(i, "選擇應用")); dialog.dismiss(); } }); } /** * 點擊關閉圖片,關閉彈出框 * @param dialog */ private void imageCloseDialog(final AlertDialog dialog) { /**從customView中獲得關閉按鈕,傳回值是一個ImageButton**/ ImageButton customviewtvimgCancel=(ImageButton)customView.findViewById(R.id.customviewtvimgCancel); /**為ImageButton設定監聽事件,使用匿名內部類實現**/ customviewtvimgCancel.setOnClickListener(new OnClickListener() { public void onClick(View v) { /**調用AlertDiloag的dismiss方法,進行關閉**/ dialog.dismiss(); } }); } /** * 產生一個Builder對象 * @param mainActivity * @return */ private Builder myBuilder(MainActivity mainActivity) { // TODO Auto-generated method stub /** * 它的作用類似於findViewById()。不同點是LayoutInflater是用來找res/layout/下的xml布局檔案,並且執行個體化; * 而findViewById()是找xml布局檔案下的具體widget控制項 * */ /**從指定的activity中獲得一個LayoutInflater對象**/ final LayoutInflater inflater=this.getLayoutInflater(); /**inflate()的作用就是將一個用xml定義的布局檔案尋找出來,傳回值是view類型**/ customView=inflater.inflate(R.layout.windowsdialog, null); /**建立一個Builder對象**/ AlertDialog.Builder builder=new AlertDialog.Builder(mainActivity); return builder.setView(customView); }
Demo下載