Android簡單例子——AlertDialog,androidalertdialog

來源:互聯網
上載者:User

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下載

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.