AlertDialog的種類和使用方法

<本文章僅作學習的筆記的目的,可能會有參考衝突與錯誤,請見諒。>

AlertDialog可以在當前頁面裏彈出一個對話框,它可以屏蔽其他UI控件的交互能力,以起到警示的作用,所以在實際設計時dialog會作爲重要信息提示作用而存在。

dialog有以下幾種形式:簡單對話框,列表對話框,單選對話框,多選對話框,自定義對話框等。

1.簡單對話框

  Button dig=(Button)findViewById(R.id.dig1);
        dig.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
                //創建Alert builder對象

                dix.setIcon(R.mipmap.ic_launcher); //設置圖標

                dix.setTitle("對話框");            //設置標題

                dix.setMessage("這是一個對話框");   //設置內容
                dix.setPositiveButton("進入界面", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                       //在此添加邏輯
                    }
                });                  
                //確定方面事件響應
                dix.setNegativeButton("殘忍的離開", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });                      //取消方面事件響應
                dix.show();
                //顯示出對話框
            }
        });
    }

步驟具體爲:a:創建 AlertDialog.Builder實例
b:設置實例的一些屬性
c:設置positive與negetive的監聽
d:show(),顯示

當顯示對話框後整個界面會被屏蔽,UI控件將無法使用。

2.列表對話框

   Button listdialog =(Button)findViewById(R.id.listdialog);
        listdialog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final String[] arr={"c語言","c++","java","python","HTML","c#"};   //常量定義數組

                AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
                //創建Alert builder對象
                dix.setIcon(R.mipmap.ic_launcher);    //設置圖標
                dix.setTitle("選擇編程語言");           //設置標題


                dix.setItems(arr, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(Activity14.this,"選擇了"+arr[which],Toast.LENGTH_SHORT).show();
                    }
                });   //傳入arr,並且設置監聽器


                dix.setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });                   //確定方面事件響應
                dix.show();
            }
        });

實現步驟:1.final一個數組作爲列表項
2.獲取實例(同簡單對話框),配置標題,圖標等
3.配置ITEM,傳入數組,設置監聽器,在監聽器裏設置事件
4.顯示對話框

3.單選對話框

   Button singlechoose=(Button)findViewById(R.id.singlechoose);
        singlechoose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String[] arr={"c語言","c++","java","python","HTML","c#"};   //常量定義數組
                AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
                //創建Alert builder對象
                dix.setIcon(R.mipmap.ic_launcher);    //設置圖標
                dix.setTitle("選擇編程語言");           //設置標題
                dix.setSingleChoiceItems(arr, 0, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        selectedId=which;
                        Toast.makeText(Activity14.this,"選擇了"+arr[which],Toast.LENGTH_SHORT).show();

                    }
                });
                dix.setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(Activity14.this,"最終選擇了"+arr[selectedId],Toast.LENGTH_SHORT).show();
                    }
                });                   //確定方面事件響應
                dix.show();
            }
        });

實現步驟:1.爲了記錄用戶選擇,我們需要在最外層添加 private int selectedId=0;
2.獲取實例(同簡單對話框),配置標題,圖標等
3.配置singlechoiceitems,傳入數組,設置默認選擇爲數組第0項,設置監聽器,在監聽器裏設置事件
4.我們用int變量記錄下最終的選擇,傳遞給確定按鈕
5.顯示對話框

4.多選對話框

  Button chooses=(Button)findViewById(R.id.chooses);
        chooses.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String[] arr={"c語言","c++","java","python","HTML","c#"};   //常量定義數組
                chooselist.clear();
                AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
                //創建Alert builder對象
                dix.setIcon(R.mipmap.ic_launcher);    //設置圖標
                dix.setTitle("選擇編程語言");           //設置標題
                dix.setMultiChoiceItems(arr, new boolean[]{false, false, false,false, false, false}, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    if(isChecked){
                        chooselist.add(which);
                    }
                        else{
                        chooselist.remove(which);
                    }
                        Toast.makeText(Activity14.this,"用戶的選擇"+chooselist.toString(),Toast.LENGTH_SHORT).show();
                    }
                });     //設置多選,傳入數組,默認選擇值,是否選中的邏輯  (如果選中,在數組裏添加選項,如果沒選中就移除選項)
                dix.setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                                      //最後的toast提示,使用了tostring方法。
                        Toast.makeText(Activity14.this,"最終選擇了"+chooselist.toString(),Toast.LENGTH_SHORT).show();
                    }
                });                   //確定方面事件響應
                dix.show();
            }
        });

實現步驟:1.爲了記錄用戶選擇,我們需要在代碼開始添加 ArrayList chooselist=new ArrayList()用來儲存用戶選項;
2.獲取實例(同簡單對話框),配置標題,圖標等
3.配置setMultiChoiceItems,傳入數組,設置默認選擇爲全部false,設置監聽器,在監聽器裏設置事件,監聽器裏的ischecked用來做判斷
如果選中,則在數組裏動態添加,如果沒選中,則移除。
4.使用tostring方法提示選擇。
5.顯示對話框

5.自定義對話框

  Java代碼
   public void bteClick(View v)
    {
        LayoutInflater layoutInflater=LayoutInflater.from(this);    //設置反射器
        View my=layoutInflater.inflate(R.layout.layout_myself_dialog,null);
        //創建反射器視圖my,(採用了反射器的inflate方法)
        AlertDialog.Builder builder=new AlertDialog.Builder(this);
        //創建對話框實例
        builder.setView(my);
        //設置好視圖
        my.findViewById(R.id.btx).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dia.dismiss();
            }
        });

        my.findViewById(R.id.btx2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dia.dismiss();
            }
        });
        //獲取按鈕對象,設置監聽
        dia=builder.create();    //顯示出來
            dia.show();
    }

實現步驟:1.首先在點擊彈出dialog的button的xml屬性上添加
android:onClick=”bteClick”屬性
2.爲onclick屬性添加邏輯
設置反射器,創建反射器視圖,創建對話框實例然後設置視圖,爲視圖上的按鈕添加響應(這裏不用使用button獲取實例,而是直接把視圖當作按鈕看待,設置dismiss方法使對話框消失)
3.最後將對話框顯示出來

自定義對話框xml佈局

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"

    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="#ffffff"
        android:gravity="center"
        android:orientation="horizontal"
        android:weightSum="1">
        <TextView
            android:text="音樂鬧鐘"
            android:textSize="18sp"
            android:textColor="#000"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.95" />

        </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:gravity="center"
        android:orientation="vertical"
        android:padding="10dp"
        >

    </LinearLayout>

    <TimePicker
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/timePicker"
        android:layerType="software"
        android:layout_gravity="center_horizontal"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff"
        android:gravity="right"
        android:orientation="horizontal"

        android:weightSum="1">

        <Button
            android:id="@+id/btx2"
            android:text="                                                取消"
            android:textColor="#558544"
            android:textSize="15sp"
            android:background="#ffffff"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_weight="0.99" />

        <Button
            android:id="@+id/btx"
            android:text="確定"
            android:textColor="#558544"
            android:textSize="15sp"
            android:background="#ffffff"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp" />
    </LinearLayout>

</LinearLayout>

上面是模仿網易雲音樂的音樂鬧鐘界面,我們可以添加獲取時間的方法來做成鬧鐘的應用。

以上爲基本對話框,另外還有時間,日期選擇功能的對話框和進度對話框,下面是用線程來模擬登錄的例子,其中用到了對話框

 package com.example.a22345.life;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
 * Created by 22345 on 2016/7/25.
 */
public class Activity13 extends Activity {
    ProgressDialog pd;
//進度框實例
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity13);

        //本篇爲登錄內容
        final EditText editText=(EditText)findViewById(R.id.passwordx);
       final AutoCompleteTextView autoCompleteTextView=(AutoCompleteTextView)findViewById(R.id.emailx);
        Button button=(Button)findViewById(R.id.sign_in);
        //以上3步爲獲取xml佈局上的實例
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email=editText.getText().toString();
                //獲取輸入的帳號內容,並轉換爲字符串
                String  pswd=autoCompleteTextView.getText().toString();
                //獲取輸入的密碼內容,並轉換爲字符串
                if(email.equals("1")&&pswd.equals("1"))
                {                        //判讀是否可以通過
                    Dialog();
                    //上面是顯示dialog
                    //兩者同時運行,但是線程不一樣
                    //下面是新建子線程
                    new Thread(){
                        public void run() {    //人爲製造的for循環耗時操作效果(Sleep)
                            for (int i = 0; i < 4; i++) {
                                try {
                                    Thread.sleep(1000);    //強制停頓1s
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                            handler.sendEmptyMessage(0);    //子線程給主線程發送消息
                        }
                    }.start();
                   //啓動線程




                }
                else if(email.equals("")&&email.equals(""))
                {
                    Toast.makeText(Activity13.this,"寶寶沒有發現你沒有輸入帳號或者密碼!",Toast.LENGTH_SHORT).show();
                }
                else
                {
                    Toast.makeText(Activity13.this,"帳號或者密碼錯誤啦!",Toast.LENGTH_SHORT).show();
                }                   //否則就提出錯誤提醒
            }
        });
        //以上爲設置button監聽器


    }

    Handler handler=new Handler()         //存在於UI主線程裏的handler
    {
        @Override
        public void handleMessage(Message msg){
            pd.dismiss();            //控制主線程裏的pd消失
            Intent intent=new Intent(Activity13.this,Activity14.class);
            startActivity(intent);    //新的活動被打開
            finish();                 //舊的活動結束
        }

    };
    public void Dialog()
    {
        pd=new ProgressDialog(this);
        pd.setIcon(R.mipmap.ic_launcher);   //圖標
        pd.setTitle("正在登錄");           //題目
        pd.setMessage("請稍後……");      //內容
        pd.setCancelable(true);      //可取消
        pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);    //圓形
        pd.show();       //顯示
    }
}                          //設置dialog方法,用來顯示對話框

分析:1.UI主線程正在運行,輸入帳號密碼後,通過gettext獲取輸入內容,用equal方法判斷,並提供未輸入或者輸入錯誤的提示
2.當輸入正確後,啓動dialog進度框,並同時啓動子線程,此時兩個線程分別走不同的線路,子線程所執行的操作就是sleep()延時效果,
通過for循環延時4s,最後由handler發出命令,回傳給handler裏的方法,執行方法達到進度框消失,新活動啓動,舊活動銷燬的效果

進度框會在4s後消失,並打開新的活動

                           2016.7.25  19:38 Surine
發佈了26 篇原創文章 · 獲贊 11 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章