Android的警示對話框AlertDialog(附Demo)


目錄

AlertDialog默認樣式 

單選樣式的AlertDialog:

AlertDialog多選樣式:

AlertDialog自定義樣式:



Alertlog簡介:Alertlog可以在當前的界面彈出一個對話框,而且這個對話框是至於所有顏色之上,能夠屏蔽其他的控件的顯示,Alertlog一般用於提示一些重要的內容或者信息。


  • 默認樣式

  • 單選樣式

  • 多選樣式

  • 自定義樣式

  • 自定義Dialog


AlertDialog默認樣式 

例子:

新建一個包,名爲:Alertdialog

在Alertdialog這個包裏新建一個Empty Activity,命名爲:DiaglogActivity.

在默認的Activity(MainActivity)設置一個按鈕可以跳轉到DiaglogActivity中,併爲這個按鈕綁定監聽器:

在佈局文件添加一個控件

在MainActivity獲取控件對象,綁定監聽器:

整體代碼,出了這個按鈕,別的可以不用管:

package com.example.yuan.e06_gridview;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.example.yuan.e06_gridview.Alertdialog.DiaglogActivity;
import com.example.yuan.e06_gridview.GridView.GridViewActivity;
import com.example.yuan.e06_gridview.ListView.ListViewActivity;
import com.example.yuan.e05_listview.R;
import com.example.yuan.e06_gridview.RecycleView.RecycleViewActivity;
import com.example.yuan.e06_gridview.Toast.ToastActivity;
import com.example.yuan.e06_gridview.WebView.WebViewActivity;


public class MainActivity extends AppCompatActivity {
    //聲明引用
    private Button mIVButton;
    private Button mLVButton;
    private Button mGVButton;
    private Button mRVButton;
    private Button mWVButton;
    private Button mToastButton,mDiaglogButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //獲取控件對象
        mIVButton=(Button) findViewById(R.id.IVButton_Id);
        mLVButton=(Button) findViewById(R.id.LVButton_Id);
        mGVButton=(Button) findViewById(R.id.GVButton_Id);
        mRVButton=(Button) findViewById(R.id.RVButton_Id);
        mWVButton=(Button) findViewById(R.id.WVButton_Id);
        mToastButton=(Button)findViewById(R.id.ToastButton_Id);
        mDiaglogButton=(Button) findViewById(R.id.DiaglogButton_Id);
        setlistener();
    }
    //設置監聽器
    public void setlistener(){
        ButtonClickListener listener =new ButtonClickListener();
        mLVButton.setOnClickListener(listener);
        mIVButton.setOnClickListener(listener);
        mGVButton.setOnClickListener(listener);
        mRVButton.setOnClickListener(listener);
        mWVButton.setOnClickListener(listener);
        mToastButton.setOnClickListener(listener);
        mDiaglogButton.setOnClickListener(listener);
    }
    //實現監聽器接口
    class ButtonClickListener implements OnClickListener{
        @Override
        public void onClick(View v) {
            Intent intent = null;
            switch (v.getId()){
                case R.id.ToastButton_Id:
                    intent = new Intent(MainActivity.this, ToastActivity.class);
                    break;
                case R.id.GVButton_Id:
                    intent=new Intent(MainActivity.this, GridViewActivity.class);
                    break;
                case R.id.IVButton_Id:
                    intent = new Intent(MainActivity.this,ImageViewActivity.class);
                    break;
                case R.id.LVButton_Id:
                    intent =new Intent(MainActivity.this, ListViewActivity.class);
                    break;
                case R.id.RVButton_Id:
                    intent = new Intent(MainActivity.this, RecycleViewActivity.class);
                    break;
                case R.id.WVButton_Id:
                    intent =new Intent(MainActivity.this, WebViewActivity.class);
                    break;
                    //跳轉到Diaglog演示界面
                case R.id.DiaglogButton_Id:
                    intent = new Intent(MainActivity.this, DiaglogActivity.class);
            }
            startActivity(intent);
        }
    }
}

現在開始正式編寫AlertDialog的代碼:

回到activity_dialog這個佈局文件中,設置幾個按鈕用於顯示不同的Diaglog的樣式:

整體代碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp">
    <Button
        android:id="@+id/DG_Button_Id1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="樣式一"
        />
    <Button
        android:id="@+id/DG_Button_Id2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="樣式二"
        />
    <Button
        android:id="@+id/DG_Button_Id3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="樣式三"
        />
    <Button
        android:id="@+id/DG_Button_Id4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="樣式四"
        />
</LinearLayout>

在DiagActivity獲取這些按鈕的控件實例,併爲其綁定監聽器:

先看看一看默認的Diaglog是怎樣的,在樣式一按鈕的響應事件添加一個Diaglog:

整體代碼:

package com.example.yuan.e06_gridview.Alertdialog;

import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.yuan.e05_listview.R;

public class DiaglogActivity extends AppCompatActivity {
    //聲明引用
    private Button mDialogButton1,mDialogButton2,mDialogButton3,mDialogButton4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_diaglog);
        //獲取控件對象
        mDialogButton1 = (Button)findViewById(R.id.DG_Button_Id1);
        mDialogButton2 = (Button) findViewById(R.id.DG_Button_Id2);
        mDialogButton3 = (Button) findViewById(R.id.DG_Button_Id3);
        mDialogButton4 = (Button) findViewById(R.id.DG_Button_Id4);
        //生成監聽器對象,綁定監聽器
        DiaglogClickListener listener = new DiaglogClickListener();
        mDialogButton1.setOnClickListener(listener);
        mDialogButton2.setOnClickListener(listener);
        mDialogButton3.setOnClickListener(listener);
        mDialogButton4.setOnClickListener(listener);
    }
    //設置按鍵的監聽器類
    class DiaglogClickListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.DG_Button_Id1:
                    //採用AlertDialog的設計者模式
                    AlertDialog.Builder bulider = new AlertDialog.Builder(DiaglogActivity.this);
                    //設置標題
                    bulider.setTitle("請回答問題");
                    //設置提示信息
                    bulider.setMessage("你覺得今天天氣怎麼樣?");
                    //設置屬性
                    bulider.setPositiveButton("很好", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(getApplicationContext(),"天氣很好",Toast.LENGTH_LONG).show();
                        }
                    })
                            .setNeutralButton("一般", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    Toast.makeText(getApplicationContext(),"天氣一般",Toast.LENGTH_LONG).show();
                                }
                            }).setNegativeButton("糟糕", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(getApplicationContext(),"天氣糟糕",Toast.LENGTH_LONG).show();
                        }
                    }).show();
                    break;
                case R.id.DG_Button_Id2:

                    break;
                case R.id.DG_Button_Id3:

                    break;
                case R.id.DG_Button_Id4:

                    break;
            }
        }
    }
}

運行應用程序:

點擊樣式一按鈕:

出現一個彈窗,旁邊的背景色變暗:

選擇三個的選項,都會有一個Toast的彈窗:

同樣也可以爲這個Dialog設置一個圖標:

現在再次運行程序,就可以看到這個圖標了:


單選樣式的AlertDialog:

運行應用程序:

選擇樣式二:

彈出一個Dialog:

選擇之後會有一個Toast的彈窗:


 可以看到上面的單選按鈕還是比較簡單的,RadioButton,還有顯示按鈕的狀態呢?這個AlertDialog同樣也可以做到

注意:checkedItem表示默認選中的選項,0,表示默認選中第一個,也就是男

運行應用程序:

這樣就像ReadioButton一樣的樣式了。

 現在發現我們選擇之後,這個AlertDialog仍然是存在的,除非點擊旁邊暗灰色部分和Back按鈕時,這個對話框纔會消失。

如果我們想讓點擊想之後就讓對話框就消失怎麼做呢?

運行應用程序:

選中男或者女之後,彈窗,這個對話框消失:


AlertDialog多選樣式:

運行應用程序:

點擊樣式四:

默認選中一個唱歌選項:

選擇選項也會出現彈窗:

總體代碼:

package com.example.yuan.e06_gridview.Alertdialog;

import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.yuan.e05_listview.R;
import com.example.yuan.e06_gridview.util.ToastUtil;

public class DiaglogActivity extends AppCompatActivity {
    //聲明引用
    private Button mDialogButton1,mDialogButton2,mDialogButton3,mDialogButton4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_diaglog);
        //獲取控件對象
        mDialogButton1 = (Button)findViewById(R.id.DG_Button_Id1);
        mDialogButton2 = (Button) findViewById(R.id.DG_Button_Id2);
        mDialogButton3 = (Button) findViewById(R.id.DG_Button_Id3);
        mDialogButton4 = (Button) findViewById(R.id.DG_Button_Id4);
        //生成監聽器對象,綁定監聽器
        DiaglogClickListener listener = new DiaglogClickListener();
        mDialogButton1.setOnClickListener(listener);
        mDialogButton2.setOnClickListener(listener);
        mDialogButton3.setOnClickListener(listener);
        mDialogButton4.setOnClickListener(listener);
    }
    //設置按鍵的監聽器類
    class DiaglogClickListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.DG_Button_Id1:
                    //採用AlertDialog的設計者模式
                    AlertDialog.Builder bulider = new AlertDialog.Builder(DiaglogActivity.this);
                    //設置標題
                    bulider.setTitle("請回答問題");
                    //設置提示信息
                    bulider.setMessage("你覺得今天天氣怎麼樣?");
                    //設置圖標
                    bulider.setIcon(R.drawable.toast1);
                    //設置屬性
                    bulider.setPositiveButton("很好", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(getApplicationContext(),"天氣很好",Toast.LENGTH_LONG).show();
                        }
                    })
                            .setNeutralButton("一般", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    Toast.makeText(getApplicationContext(),"天氣一般",Toast.LENGTH_LONG).show();
                                }
                            }).setNegativeButton("糟糕", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(getApplicationContext(),"天氣糟糕",Toast.LENGTH_LONG).show();
                        }
                    }).show();
                    break;
                case R.id.DG_Button_Id2:
                    final String [] array = new String[]{"男","女"};
                    AlertDialog.Builder bulier1 = new AlertDialog.Builder(DiaglogActivity.this);
                    bulier1.setTitle("選擇你的性別").setItems(array, new DialogInterface.OnClickListener() {
                        @Override
                        //witch是數組的索引,從0開始
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(getApplicationContext(),array[which],Toast.LENGTH_LONG).show();
                        }
                    }).show();

                    break;
                case R.id.DG_Button_Id3:
                    final String [] array3 = new String[]{"男","女"};
                    AlertDialog.Builder bulier3 = new AlertDialog.Builder(DiaglogActivity.this);
                    bulier3.setTitle("選擇你的性別");
                    bulier3.setSingleChoiceItems(array3, 0, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(getApplicationContext(),array3[which],Toast.LENGTH_LONG).show();
                            //對話框消失
                            dialog.dismiss();
                        }
                    }).setCancelable(false).show();

                    break;
                case R.id.DG_Button_Id4:
                    final String [] array4 = new String[]{"唱歌","跳舞","下棋","打球"};
                    boolean [] isSelected = new boolean[]{true,false,false,false};
                    AlertDialog.Builder bulier4 = new AlertDialog.Builder(DiaglogActivity.this);
                    bulier4.setTitle("選擇你的興趣").setMultiChoiceItems(array4, isSelected, new DialogInterface.OnMultiChoiceClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                            ToastUtil.showMsg(DiaglogActivity.this,array4[which]+":"+isChecked);
                        }
                    }).setPositiveButton("確定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(getApplicationContext(),"選擇確定",Toast.LENGTH_LONG).show();
                        }
                    }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(getApplicationContext(),"選擇取消",Toast.LENGTH_LONG).show();
                        }
                    }).show();

                    break;
            }
        }
    }
}

 


AlertDialog自定義樣式:

在activity_dialog佈局文件再增加一個Button控件:

然後再對應的Activity( DialogActivity)聲明空間,綁定監聽器:

需要爲自定義的樣式提供一個子佈局文件,所以新建一個佈局文件,命名爲:layout_dialog

根佈局爲線性佈局

設置一個登錄界面:

整體代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp">
    <EditText
        android:id="@+id/usernameId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="username"
        android:maxLines="1"/>
    <EditText
        android:id="@+id/passwardId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="passward"
        android:maxLines="1"/>
    <Button
        android:id="@+id/Button_LoginId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登陸"
        android:layout_marginTop="10dp"/>

</LinearLayout>

 

運行應用程序:

按鍵自定義樣式:

彈出一個對話框,可以在輸入賬號和密碼之後,在登陸按鈕的點擊事件去賬號密碼:


自定義Dialog:

新建一個包,命名爲:widgeDialog

在包中新建一個類,命名爲:CumstomDialogA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章