Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之Dialog分析

Android之Dialog分析

編輯:關於Android編程

Android之Dialog分析

以Dialog為引導,Android的彈出式消息一共是三種(據我所知):Dialog,tocast,notification 其三種彈出式消息各有所長。今天重點是分析其中的Dialog。Android的Dialog是android界面編程的重點。當然android被稱之為“頁程序”就更體現頁面編程,UI線程了解的重要性了。

本文的目錄結構:

1、Android中的幾種Dialog

2、Dialog的創建方式

3、Android的警告對話框AlertDialog

4、Android的進度框ProgressDialog

5、日期選擇框& 時間選擇框

6、對話框風格的窗口

7、popupwindow

創建對話框一般是出現在當前Activity之上的一個小窗口,此時Activity失去焦點,轉由對話框接受用戶的交互(觸摸響應事件)

首先看一看Dialog的類圖,由此可以更清晰的看到控件的屬性繼承關系

\

一、Android中的幾種Dialog:<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvaDI+CjxwPjGhoiAg19S2qNLlo7pEaWFsb2c8L3A+CjxwPjKhoiAgvq+45r/yo7pBbGVydERpYWxvZzwvcD4KPHA+M6GiICC9+LbIv/KjulByb2dyZXNzRGlhbG9nPC9wPgo8cD40oaIgIMjVxtrRodTxv/KjukRhdGVQaWNrZXJEaWFsb2c8L3A+CjxwPjWhoiAgyrG85NGh1PG/8qO6VGltZVBpY2tlckRpYWxvZzwvcD4KPHA+PHN0cm9uZz5BbmRyb2lktcTG5Mv7vLjW1sDgJiMyMDI4NDu1xLSwv9o8L3N0cm9uZz48L3A+CjxwPjGhoiAgttS7sL/yt+cmIzI2Njg0O7XEtLC/2jwvcD4KPHA+MqGiICBQb3B1cHdpbmRvdzwvcD4KPHA+PGJyPgo8L3A+CjxoMj62/qGiRGlhbG9ntcS0tL2ot73KvdfctcTAtMu1ysfBvdbWo7o8L2gyPgo8cD4xoaIgINaxvdNuZXfSu7j2RGlhbG9nttTP86OsyLu687X308NEaWFsb2e21M/ztcRzaG93KCm6zWRpc21pc3MoKbe9t6jAtL/Y1sa21Luwv/K1xM/Uyr66zdL+stg8L3A+CjxwPjKhoiAg1NpBY3Rpdml0ebXEb25DcmVhdGVEaWFsb2coaW50aWQpt723qNbQtLS9qERpYWxvZ7bUz/Oyore1u9ijrMi7uvO199PDQWN0aXZpdHm1xHNob3dEaWFsb2ejqGludCBpZKOpus1kaXNtaXNzRGlhbG9no6hpbnQgaWSjqcC0z9TKvrrN0v6y2LbUu7C/8jwvcD4KPHA+1eLBvdXftcTH+LHw1NrT2s2ouf212rb+1ta3vcq9tLS9qLXEttS7sL/yu+G8zLPQQWN0aXZpdHm1xMr00NSjrLKix9JBbmRyb2lkz7XNs7vh19S2r7ncwO3Dv7j2ttS7sL/ytcTXtMyssqK9q8v8w8e6zUFjdGl2aXR5way906Os1eLR+bWxtPK/qtK7uPa21Luwv/LKsaOsTWVudbz8u+HP1Mq+QWN0aXZpdHm1xLLLtaWjrNL0wb+8/LvhtffV+0FjdGl2aXR5tbHHsMq508O1xNL0xrXB97XE0vTBv6GjzazKsbXatv7W1re9yr3U2kFjdGl2aXR51tDT0Li4wOC3vbeov8nKtc/Wo7o8L3A+CjxwPm9uUHJlcGFyZURpYWxvZ6OoaW50LCBEaWFsb2ejqTrI57n7z6PN+8O/tM7P1Mq+ttS7sL/ytcTKsbry09C2r8ysuPy4xLXExNrI3aOsxMfDtNDeuMTV4rj2uq/K/TwvcD4KPHA+b25DcmVhdGVEaWFsb2ejqGludKOptbHSu7j2ttS7sL/ytdrSu7TOsbvH68fzyrGjrEFuZHJvaWS199PD1eK49re9t6ijrNXiysez9cq8u6+21Luwv/K1xLXYt72jrLS0vai21Luwv/LWrrrzo6y9q7e1u9ixu7S0vai1xLbUz/M8L3A+CjxwPmRpc21pc3NEaWFsb2ejqGludKOptv7V37XE0Ke5+8rH0rvR+bXEoaM8L3A+CjxwPnJlbW92ZURpYWxvZyhpbnQpyOe5+8TjyrnTw29uQ3JlYXRlRGlhbG9nKGludCnAtLncwO3E47XEttS7sL/ytcTXtMysLCDEx8O0w7+0zsTjtcS21Luwv/Kxu73is/3KsSwguMO21Luwv/K21M/ztcTXtMysu+Gxu0FjdGl2aXR5saO05i4gyOe5+8Tjvva2qMTjsrvU2dDo0qrV4rj2ttTP87vy1d/Q6NKqx+Wz/bbUu7C/8rXE17TMrCwgxMfDtMTj06a4w7X308PV4rj2t723qKGj1eK9q7DRy/nT0LjDttTP87XExNqyv9L908PSxrP9oaM8L3A+CjxwPjxicj4KPC9wPgo8aDI+yP2hokFuZHJvaWS1xL6vuOa21Luwv/JBbGVydERpYWxvZzwvaDI+CjxwPsbkyrW+r7jmttS7sL/yQWxlcnREaWFsb2fKx9f3zqpEaWFsb2e1xNK7uPbN2NW5o6y3vbHj0+vTptPDuPfW1rnMtqjEo8q9tcS21Luwv/LW0KO7yLe2qLXEyfqzybbUu7C/8qOssPzAqLHqzOKjrMTayN2jrNGhz+6jrLC0xaW1yLXEyejWw7rNz+zTprXIo7vV4rrct72x46OstavKx8q1vMrKtc/W1tDItNKy09DX1Ly6tcS2zLDlo7p0aGVtZbjEseSyu8HLo6jDsiYjMjAyODQ7yse5zLaotcSjrLHIyOfP68no1sNEaWFsb2e1xLGzvrDJq824w/e+zbK70NCjrL/JxNzO0ru5sru74dPDyKujqaGjPC9wPgo8cD48c3Ryb25nPs/Cw+a96cncQWxlcnREaWFsb2e1xLv5sb7Tw7eoo7o8L3N0cm9uZz48L3A+CjxwPkFsZXJ0RGlhbG9nyfqzybXEttS7sL/yv8m31s6qyOfPwjxzdHJvbmc+y8S49sf40/Kjujwvc3Ryb25nPjwvcD4KPHA+oaTJ+rPJttTP8yDKudPDtLS9qCBBbGVydERpYWxvZy5CdWlsZGVyttTP8zwvcD4KPHA+oaTNvLHqx/ggICC199PDQWxlcnREaWFsb2cuQnVpbGRlcrXEc2V0SWNvbre9t6jJ6NbDPC9wPgo8cD6hpLHqzOLH+CAgILX308NBbGVydERpYWxvZy5CdWlsZGVytcRzZXRUaXRsZSgpu/JzZXRDdXN0b21UaXRsZSgpt723qMno1sOx6sziPC9wPgo8cD6hpMTayN3H+CAgILX308NBbGVydERpYWxvZy5CdWlsZGVytcTP4LnYyejWw7e9t6jJ6NbDttS7sL/yxNrI3TwvcD4KPHA+oaSwtMWlx/ggtffTw0FsZXJ0RGlhbG9nLkJ1aWxkZXK1xHNldFBvc2l0aXZlQnV0dG9uKCmhonNldE5lZ2F0aXZlQnV0dG9uKCkgu/JzZXROZXV0cmFsQnV0dG9uKCm3vbeozO2807bguPawtMWloaM8L3A+CjxwPrX308NBbHRlckRpYWxvZy5CdWlsZGVytcRjcmVhdGUoKbe9t6i0tL2oQWxlcnREaWFsb2e21M/zo6zU2bX308NBbGVydERpYWxvZ7bUz/O1xHNob3e3vbeovau4w7bUu7C/8s/Uyr6z9sC0oaM8L3A+CjxwPtLUyc+1xMrHQWxlcnREaWFsb2e1xLnMtqjEo8q9o7s8L3A+CjxwPjxicj4KPC9wPgo8cD48c3Ryb25nPr7fzOW4/LjExNrI3cf4tcTP1Mq+xNrI3b/JtO+1vbK7zay1xMS/tcSjrEFsZXJ0RGlhbG9nzOG5qcjnz8LB+dbQt723qMC01ri2qLbUu7C/8rXExNrI3aGjPC9zdHJvbmc+PC9wPgo8cD5zZXRNZXNzYWdlKCmjusno1sO21Luwv/LE2sjdzqq88rWltcTOxLG+xNrI3SA8L3A+CjxwPnNldEl0ZW1zKCmjusno1sO21Luwv/LE2sjdzqq88rWlwdCx7c/uPC9wPgo8cD5zZXRTaW5nbGVDaG9pY2VJdGVtcygpo7rJ6NbDttS7sL/yxNrI3c6qtaXRocHQse3P7jwvcD4KPHA+c2V0TXVsdGlDaG9pY2VJdGVtcygpo7rJ6NbDttS7sL/yxNrI3c6qtuDRocHQse3P7jwvcD4KPHA+c2V0QWRhcHRlcigpo7rJ6NbDttS7sL/yxNrI3c6q19S2qNLlwdCx7c/uPC9wPgo8cD5zZXRWaWV3KCmjusno1sO21Luwv/LE2sjdzqrX1Lao0uW1xFZpZXc8L3A+CjxwPtLUyc+1xNXiwfnW1rbUu7C/8rv5sb6+zcrHv8nS1ML61+PQ6NKqwcujrM/qz7i1xMq1z9a/ybLOv7yyqc7Eo7podHRwOi8vd3d3Lm9zY2hpbmEubmV0L3F1ZXN0aW9uLzU0MTAwXzMyNDg2PC9wPgo8cD48YnI+CjwvcD4KPGgyPsvEo6xBbmRyb2lktcS9+LbIv/JQcm9ncmVzc0RpYWxvZzwvaDI+CjxwPtK7uPZQcm9ncmVzc0RpYWxvZyi9+LbIttS7sL/yKcrHQWxlcnREaWFsb2e1xMCp1bmho8v8v8nS1M/Uyr7Su7j2vfi2yLXEtq+7raGqoaq9+LbIu7e78tXfvfi2yMz1oaPV4rj2ttS7sL/y0rK/ydLUzOG5qbC0xaWjrMD9yOfIoc/70ru49s/C1Ni1yKGjPC9wPgo8cD69+LbIv/JEaWFsb2fKx9K7uPbD98/UtcTWsb3Tw+a21L34tsi/8rXERGlhbG9no6zV4tH51/bKx8Pis/3By9fUtqjS5XByb2dyZXNzILXERGlhbG9nu/LKx0FsZXJ0RGlhbG9ntcS4tNTToaM8L3A+CjxwPjxzdHJvbmc+xuS+38zlyrXP1tPQwb3W1re9yr2jujwvc3Ryb25nPjwvcD4KPHA+MaGi1rvKx7S0vai88rWltcS9+LbIttS7sL/yo6y199PDUHJvZ3Jlc3NEaWFsb2fM4bmptcS+ssysc2hvdygpt723qM/Uyr621Luwv/K8tL/JPC9wPgo8cD4yoaLKx25ldyBQcm9ncmVzc0RhaWxvZyh0aGlzKbvxyKG21M/zo6zIu7rzyejWw8r00NS1yDwvcD4KPHA+PGJyPgo8L3A+CjxoMj7O5aGiyNXG2tGh1PG/8iAmYW1wOyDKsbzk0aHU8b/yPC9oMj4KPHA+yNXG2tGh1PG/8qOoRGF0ZVBpY2tEaWFsb2ejqbrNyrG85NGh1PG/8qOoVGltZVBpY2tlckRpYWxvZ6OptcTKudPDysexyL3PvPK1pbXEo6w8c3Ryb25nPsG9uPayvdboo7ogPC9zdHJvbmc+CjwvcD4KPHA+MaGiILa8ysfPyG5ld7P2RGF0ZVBpY2tEaWFsb2cgJmFtcDsgVGltZVBpY2tlckRpYWxvZ8q1wP2jrLX308PG5HNob3coKbe9t6i8tL/Jz9TKvrP2wLShozwvcD4KPHA+MqGiIM6qxuSw87aovODM/cb3o7vJ6NbDysK8/rzgzP3G96OstNO2+LvxyKHTw7unyejWw7XEysK8/qOoyrG85CZhbXA7IMjVxtqjqTwvcD4KPHA+1NpuZXez9rbUz/O1xM2syrGjrDxzdHJvbmc+vODM/cb3ysex2NDrtcQ8L3N0cm9uZz48L3A+CjxwPk5ld0R0ZVBpY2tlckRpYWxvZyh0aGlzLCBuZXcgRGF0ZVBpY2tlckRpYWxvZy5PbkRhdGVTZXJMaXN0ZW5lcigpe6Gt1NrKtc/Wt723qNbQu/HIocjVxtqhrX0pOzwvcD4KPHA+TmV3VGltZXJQaWNrZXJEaWFsb2codGhpcywgbmV3IFRpbWVQY2lrZXJEaWFsb2cuT25UaW1lU2V0TGlzdGVuZXIoKXuhrdTayrXP1re9t6jW0LvxyKHKsbzkoa19KTs8L3A+CjxwPjxicj4KPC9wPgo8aDI+wfmhorbUu7C/8rfnJiMyNjY4NDu1xLSwv9o8L2gyPgo8cD7G5Mq1sb7WysnPyNTIu8rHtLC/2qOssqKyu8Tcy+PKx0RpYWxvZ6O7xuSxvtbKyc/Kx0FjdGl2aXR5o6zWu8rHvavL/Nf2s8nBy7bUu7C/8rfnJiMyNjY4NDu2+NLRoaM8L3A+CjxwPtXiuPbKxzxzdHJvbmc+1NpBY3Rpdml0edbQxeTWw8/gudh0aGVtZdb3zOI8L3N0cm9uZz6+zW9rwcuhozwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">


七、popupwindow

Popupwindow也是可以創建類似對話框風格的窗口的,使用簡單,兩個步驟

1、 popupwindow的構造器創建popupwindow對象

2、 顯示的方式有兩種:

1、 作為某控件的下拉項:showAsDropDown(View v)

2、 指定位置展示:showAtLocation()在指定位置顯示出來

(示例中的重點是點擊外部事件的時候popupwindow會不會消失的問題,設置背景很重要)

packagecom.example.hellopopupwindow;
 
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.util.Log;
importandroid.view.LayoutInflater;
importandroid.view.MotionEvent;
importandroid.view.View;
import android.view.View.OnClickListener;
importandroid.view.View.OnTouchListener;
importandroid.view.ViewGroup.LayoutParams;
importandroid.widget.Button;
importandroid.widget.PopupWindow;
importandroid.widget.Toast;
 
public classMainActivity extends Activity {
 
    private Context mContext = null;
 
    @Override
    protected void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mContext = this;
 
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(newView.OnClickListener() {
 
            @Override
            public void onClick(View view) {
 
                showPopupWindow(view);
            }
        });
    }
 
    private void showPopupWindow(View view) {
 
        // 一個自定義的布局,作為顯示的內容
        View contentView =LayoutInflater.from(mContext).inflate(
                R.layout.pop_window, null);
        // 設置按鈕的點擊事件
        Button button = (Button) contentView.findViewById(R.id.button1);
        button.setOnClickListener(newOnClickListener() {
 
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext,"button is pressed",
                        Toast.LENGTH_SHORT).show();
            }
        });
 
        final PopupWindow popupWindow = newPopupWindow(contentView,
                LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, true);
 
        popupWindow.setTouchable(true);
        popupWindow.setTouchInterceptor(newOnTouchListener() {
 
            @Override
            public boolean onTouch(View v,MotionEvent event) {
 
                Log.i("mengdd","onTouch : ");
                return false;
                // 這裡如果返回true的話,touch事件將被攔截
                // 攔截後 PopupWindow的onTouchEvent不被調用,這樣點擊外部區域無法dismiss
            }
        });
        // 如果不設置PopupWindow的背景,無論是點擊外部區域還是Back鍵都無法dismiss彈框
        // 我覺得這裡是API的一個bug
       popupWindow.setBackgroundDrawable(getResources().getDrawable(
               R.drawable.selectmenu_bg_downward));
 
        // 設置好參數之後再show
        popupWindow.showAsDropDown(view);
    }
}


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved