android基礎學習-android篇day16-Dialog的使用
Dialog 的基礎知識
Dialog 對話方塊簡介
Dialog 是 Android 中根據使用者的意向彈出一些提示的資訊,告訴使用者是否要執行該操 作的一種小的窗體。
Dialog 對話方塊的分類
-
1) AlertDialog,彈出式對話方塊
-
2) ProgressDialog 進度對畫框
-
3) DatePickerDialog 對話方塊和 TimerPickerDialog 日期對話方塊
-
4) 相關下載
選擇自定義下載,根據我們的需求下載不同的內容 SDK,選擇下載開發包,示
例程式碼和類參考。
AlertDialog 如何建立
Android 中彈出式對話方塊是通過自己內部類 builder 來實現的,通過 builder 可以設 置一系列對話方塊的引數,呼叫 Create()方法就可以建立,具體在程式碼中展示。
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("設定字型顏色");//設定標題
builder.setIcon(android.R.drawable.btn_star);//設定圖示
//setItems(表示資料元的資源id(在string.xml中定義),表示點選item中的選項時觸發的監聽事件)
builder.setItems(R.array.color_name, new DialogInterface.OnClickListener() {
//int which 表示點選item的下標從0開始
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
break;
}
}
});
builder.create().show();
<string-array name="color_name">
<item>紅色</item>
<item>綠色</item>
<item>藍色</item>
</string-array>
-
如何取消對話方塊
呼叫 Cancel()或者 dismiss()方法就可以取消對話方塊
dialog.dismiss();//選中一項之後,關閉
-
如何給對話方塊新增列表項
傳統的給對話方塊新增列表項是通過 setitems()方法來實現的,使用者可以點選不同的條目 選擇不同的內容,具體做法是在 string.xml 中新增一個陣列,以下圖為例說明。
<string-array name="color_name">
<item>紅色</item>
<item>綠色</item>
<item>藍色</item>
</string-array>
在 setItems()方法中引用這個陣列就可以完成,具體引用如下圖所示:
builder.setItems(R.array.color_name, new DialogInterface.OnClickListener() {
//int which 表示點選item的下標從0開始
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
。 該方法中的第一個引數是我們在 string.xml 中定義的資料列表項,第二個引數是點選事件,一定是 DialogInterface 下的點選事件
為對話方塊新增單選項的列表項
對列表項新增單選項和之前沒有多大的區別,就是給 builder 設定了 setSingleChoice() 方法
- 第一個引數是我們在 string,xml 下定義的陣列
- 第二個引數時系統子自帶的佈局,通常是 android.R.layout.simple_selectable_list_item
- 第三個引數任然是對話方塊 的點選事件,程式碼如下圖所示:
setSingleChoiceItems(資料來源id(string.xml中定義),表示預設被選中item的下標 (-1表示沒有預設選中),點選單選item的監聽事件)
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("設定字型大小");
builder.setIcon(android.R.drawable.btn_star);
//拿到字號大小的陣列
final String[] fontValues=getResources().getStringArray(R.array.font_size);
builder.setSingleChoiceItems(R.array.font_name, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
tv.setTextSize(Float.parseFloat(fontValues[i]));//將string裝成float
dialog.dismiss();//選中一項之後,關閉//dialog是一個全域性AlertDialog物件
}
});
dialog=builder.create();
dialog.show();
為對話方塊新增多選框的列表項
建立對話方塊,設定一系列屬性,然後設定 setMultipleChoice()就可以實現,但是需要 注意的是該方法的引數
- 第一個引數是我們定義的列表項
- 第二個引數是一個 boolean 型別的陣列
- 第三個引數是點選事件
程式碼如下:
//在string.xml中定義的字串陣列
String[] knows = getResources().getStringArray(R.array.knowledge);
進度條對話方塊
進度條對話方塊是一種常用的對話方塊,通常是當使用者請求網路時顯示的一種對話方塊,
第一 種對話方塊是一種預設的圓形進度條的對話方塊,實現程式碼如下:
final ProgressDialog pdl=new ProgressDialog(MainActivity.this);
pdl.setTitle("點我下載啊");
pdl.setIcon(R.drawable.prog);
pdl.setCancelable(false);//設定無論點選哪些區域,對話方塊都不會消失
水平的帶有進度條的對話方塊
final ProgressDialog pdl=new ProgressDialog(MainActivity.this);
pdl.setTitle("點我下載啊");
pdl.setIcon(R.drawable.prog);
//設定對話方塊的樣式是水平顯示的
pdl.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//設定無論點選哪些區域,對話方塊都不會消失
pdl.setCancelable(false);
帶有進度條的對話方塊,並且進度條是可變化的對話方塊
這是類似網路下載資料時的一個 操作,當開始下載時進度條顯示為零,當下下載完成時進度條的進度為 100,並且文字 域的文字變為下載完成,該過程是通過執行緒來完成的,具體程式碼如下:
自定義對話方塊
在安卓開發中,時常遇到要彈窗提醒的情況。而系統自帶的彈出對話方塊由不是很美觀,可以通過自己繼承對話方塊類(Dialog),並設定自定義的佈局檔案,來達到美化彈出式對話方塊的目的。
- 首先是自定義一個對話方塊類,繼承自 Dialog,然後再建構函式中傳入對話方塊顯示內容、 按鈕響應函式等引數:
- 在自定義對話方塊類的 OnCreate 函式中,設定對話方塊的佈局,以及顯示風格:通常是自己定義對話方塊的頭部和內容部分,然後將其載入進來設定給對話方塊,並顯示
- 另外,自定義的對話方塊類 UserDefinedDialog 同時實現了 OnClickListener 介面,用於實現對點選對話方塊上按鈕的響應,在響應函式中,會判斷在構造該類的時候 是否傳入了相應的響應函式,並交由該函式處理:
DatePickerDialog日期對話方塊
需要注意的是 DatePickerDialog 對話方塊構造方法中的參數列示的意義,該方法中共有 5 個引數
- 分別是上下文物件
- 日期設定的監聽器
- 當前的年份
- 當前的月份
- 當前的日期數,
寫好後展示對話方塊就可以了。 日期對話方塊的基本使用如下程式碼所示
DatePickerDialog dll=new
DatePickerDialog(MainActivity.this, new
DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, final int year,
final int monthOfYear, final int dayOfMonth) {
}
},Calendar.DAY_OF_YEAR,Calendar.DAY_OF_MONTH,Calendar.DATE
);
dll.show();
時間設定對話方塊的基本用法
需要注意的還是構造方法中引數的問題,該方法中公有 5 個引數分別表示
- 上下文物件,
- 時間設定的監聽器
- 當前的小時數
- 當前的分鐘數
- 是否採用 24 進位制的計數法。
TimePickerDialog tdl=new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
}
},Calendar.HOUR_OF_DAY,Calendar.MINUTE,false);
tdl.show();
綜合案例:
string.xml//定義字串陣列
<resources>
<string name="app_name">alertDialogList</string>
<string name="str_color">設定字型顏色</string>
<string name="str_setting">進行設定</string>
<string name="str_size">設定字型大小</string>
<string-array name="color_name">
<item>紅色</item>
<item>綠色</item>
<item>藍色</item>
</string-array>
<!--設定文字-->
<string-array name="setting_name">
<item>WIFI設定</item>
<item>藍芽設定</item>
<item>聲音設定</item>
<item>日期設定</item>
</string-array>
<string-array name="setting_images">
<item>img01</item>
<item>img02</item>
<item>img03</item>
<item>img04</item>
</string-array>
<string-array name="font_name">
<item>小號</item>
<item>中號</item>
<item>大號</item>
<item>特大號</item>
</string-array>
<string-array name="font_size">
<item>15</item>
<item>20</item>
<item>25</item>
<item>30</item>
</string-array>
</resources>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/bt_list"
style="@style/bt_name"
android:text="@string/str_color"/>
<Button
android:id="@+id/bt_setting"
style="@style/bt_name"
android:text="@string/str_setting"
android:layout_below="@+id/bt_list"
/>
<Button
android:id="@+id/bt_size"
style="@style/bt_name"
android:text="@string/str_size"
android:layout_below="@+id/bt_setting"
/>
<TextView
android:id="@+id/tvInfo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:background="#999"
android:gravity="center"
android:text="Hello World"
android:layout_below="@+id/bt_size"/>
</RelativeLayou
list_items.xml//顯示圖示列表Dialog的一個佈局
<?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="match_parent">
<ImageView
android:id="@+id/iv_logo"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/img01"
/>
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Tv"/>
</LinearLayout>
MainActivity.java
package com.demo.alertdialoglist;
import android.Manifest;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
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.SimpleAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 演示AlertDialog各種列表形式
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button bt_list, bt_setting, bt_size;
private TextView tv;
private int CheckItemId = 0;
private AlertDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
public void initView() {
bt_list = findViewById(R.id.bt_list);
tv = findViewById(R.id.tvInfo);
bt_list.setOnClickListener(this);//繫結監聽器
bt_setting = findViewById(R.id.bt_setting);
bt_setting.setOnClickListener(this);
bt_size = findViewById(R.id.bt_size);
bt_size.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_list://設定字型的顏色
showCommonListDialog();
break;
case R.id.bt_setting://設定介面
showAdapterListDialog();
break;
case R.id.bt_size:
showSingleListDialog();//設定字型大小
break;
}
}
/**
* 展示介面卡列表dialog
*/
public void showAdapterListDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("開啟設定");
builder.setIcon(android.R.drawable.btn_star);
//構建資料data
//獲取名稱陣列
String[] stringNames = getResources().getStringArray(R.array.setting_name);
//獲取圖片陣列
String[] imageNames = getResources().getStringArray(R.array.setting_images);
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
for (int i = 0; i < stringNames.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("setting", stringNames[i]);
//getIdentifier() 根據資源的名稱和型別獲取資源的id
int imageId = getResources().getIdentifier(imageNames[i], "drawable", getPackageName());
map.put("image", imageId);
data.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.list_item,
new String[]{"setting", "image"},
new int[]{R.id.tv_name, R.id.iv_logo});
//setAdapter(載入介面卡物件,點選列表項出發事件)
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
switch (which) {
case 0://wifi
intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
break;
case 1://藍芽
intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
break;
case 2://聲音
intent = new Intent(Settings.ACTION_SOUND_SETTINGS);
break;
case 3://日期
intent = new Intent(Settings.ACTION_DATE_SETTINGS);
break;
}
startActivity(intent);
}
});
builder.create().show();
}
/*
展示普通列表的Dialog的方法
*/
public void showCommonListDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("設定字型顏色");
builder.setIcon(android.R.drawable.btn_star);
//setItems(表示資料元的資源id,表示點選item中的選項時觸發的監聽事件)
builder.setItems(R.array.color_name, new DialogInterface.OnClickListener() {
//int which 表示點選item的下標
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
tv.setTextColor(Color.RED);
break;
case 1:
tv.setTextColor(Color.GREEN);
break;
case 2:
tv.setTextColor(Color.BLUE);
break;
}
}
});
builder.create().show();
}
/**
* 展示單選列表Dialog
*/
public void showSingleListDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("設定字型大小");
builder.setIcon(android.R.drawable.btn_star);
//拿到字號大小的陣列
final String[] fontValues = getResources().getStringArray(R.array.font_size);
//setSingleChoiceItems(資料來源id(string.xml中定義),
// 表示預設被選中item的下標 -1(表示沒有預設選中),點選單選item的監聽事件)
builder.setSingleChoiceItems(R.array.font_name, CheckItemId, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
tv.setTextSize(Float.parseFloat(fontValues[i]));//將string裝成float
dialog.dismiss();//選中一項之後,關閉
}
});
dialog = builder.create();
dialog.show();
//builder.create().show();
}
}
相關文章
- android基礎學習-android篇day16-Menu的使用Android
- android基礎學習-android篇day17-Android Fragment(碎片)基本使用AndroidFragment
- android基礎學習-android篇day12-android的UI基礎入門AndroidUI
- android基礎學習-android篇day12-UI基礎控制元件(上)AndroidUI控制元件
- android基礎學習-android篇day13-UI基礎控制元件(下)AndroidUI控制元件
- android基礎學習-android篇day11-android的入門工具安裝流程Android
- android基礎學習-android篇day17-Activity的生命週期(轉)Android
- android基礎學習-android篇day15-相對佈局的常用屬性Android
- Android基礎知識學習Android
- android基礎學習-android篇day14-UI基礎控制元件綜合案例——點餐系統AndroidUI控制元件
- Android 面試基礎篇Android面試
- Android基礎-Activity基本使用Android
- Android面試之Java 基礎篇Android面試Java
- android基礎學習-java篇day7-step3-第三節:java字串AndroidJava字串
- android基礎學習-java篇day8-step3-第四節:java集合AndroidJava
- Android 學習筆記核心篇Android筆記
- Android 學習筆記思考篇Android筆記
- 詳解 Android 中的 IPC 機制:基礎篇Android
- Android基礎及應用 Service的使用Android
- Android 學習筆記架構篇Android筆記架構
- 深入瞭解Android藍芽Bluetooth——《基礎篇》Android藍芽
- 【Android繪圖】繪圖之基礎篇(一)Android繪圖
- Android Retrofit 2.5.0使用基礎詳解Android
- Android RxJava:基礎介紹與使用AndroidRxJava
- android基礎學習-java篇day9-step3-第五節:java執行緒AndroidJava執行緒
- Python基礎學習篇Python
- Android基礎—FragmentAndroidFragment
- Android學習—— Android佈局Android
- android基礎學習-java篇day11-綜合測試-播放器管理系統AndroidJava播放器
- Android基礎知識Android
- Android 基礎之 HandlerAndroid
- Android 繪圖基礎Android繪圖
- android基礎學習-java篇day10-step3-第六節:java輸入輸出流AndroidJava
- 【Android基礎】講講Android的事件分發機制Android事件
- Gradle For Android (一) 基礎定義與依賴管理篇GradleAndroid
- Android面試之——數學基礎知識Android面試
- Android學習筆記(建立Menu,Intent的使用)Android筆記Intent
- MySQL學習筆記【基礎篇】MySql筆記