目錄
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