淺析Android中強(qiáng)大的Dialog
Android中經(jīng)常會(huì)使用到Dialog(彈出框效果),而且功能非常強(qiáng)大,可以模擬出N種彈出框效果。如圖所示:
下面將通過(guò)一個(gè)小實(shí)例,來(lái)像大家展示Android功能強(qiáng)大的Dialog。代碼都寫了詳細(xì)的注釋,讀者不妨試著手動(dòng)去敲。
當(dāng)然,由于時(shí)間的關(guān)系,還有個(gè)別功能沒(méi)有完成,先有的幾個(gè)展示效果中也可能有bug,代碼也有很多需要優(yōu)化的地方。望大家熱心指出。
下面是代碼(有點(diǎn)長(zhǎng)哦):
package com.chaoyang.activity;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
final String[] items={"張三","李四","王五","趙六","阿貓","阿狗"};
int mSingleChoiceID = -1;
ArrayList <Integer>MultiChoiceID = new ArrayList <Integer>();
private ProgressDialog mProgressDialog = null;
private static final int MAX_PROGRESS = 100;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/*START 設(shè)置那些按鈕的點(diǎn)擊對(duì)象*/
ButtonOnclikListen listen =new ButtonOnclikListen();
Button btnConfim =(Button)this.findViewById(R.id.btnConfim);
Button btnCheck =(Button)this.findViewById(R.id.btnCheck);
Button btnCustom =(Button)this.findViewById(R.id.btnCustom);
Button BtnList =(Button)this.findViewById(R.id.BtnList);
Button btnMore =(Button)this.findViewById(R.id.btnMore);
Button BtnProgressbar =(Button)this.findViewById(R.id.BtnProgressbar);
Button btnRead =(Button)this.findViewById(R.id.btnRead);
Button btnRidio =(Button)this.findViewById(R.id.btnRidio);
btnConfim.setOnClickListener(listen);
btnCheck.setOnClickListener(listen);
btnConfim.setOnClickListener(listen);
BtnList.setOnClickListener(listen);
btnMore.setOnClickListener(listen);
BtnProgressbar.setOnClickListener(listen);
btnRead.setOnClickListener(listen);
btnRidio.setOnClickListener(listen);
/* END */
}
//定義一個(gè)公共方法,彈出消息
private void showDialogMSG(String msg) {
new AlertDialog.Builder(MainActivity.this)
.setMessage(msg)
.show();
}
//定義一個(gè)內(nèi)部類,繼承至OnClickListener,專門來(lái)處理按鈕點(diǎn)擊事件(面向?qū)ο?,靈活)
private final class ButtonOnclikListen implements View.OnClickListener
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Button button =(Button) v;//接收被點(diǎn)擊的Button對(duì)象
AlertDialog.Builder builder =new AlertDialog.Builder(MainActivity.this);//定義一個(gè)彈出框?qū)ο?br /> builder.setIcon(R.drawable.aa);//設(shè)置彈出框的ICON
switch (v.getId())
{
case R.id.btnConfim :
builder.setTitle("確定提交嗎?");//設(shè)置彈出框的標(biāo)題
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showDialogMSG("您選擇了確定");
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showDialogMSG("您選擇了取消");
}
});
break;
case R.id.btnMore:
builder.setTitle("評(píng)價(jià)");//標(biāo)題
builder.setMessage("說(shuō)說(shuō)李孝利在你心里的印象");//彈出框消息
builder.setPositiveButton("性感",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
showDialogMSG("您覺(jué)得她很性感");
}
});
builder.setNeutralButton("漂亮", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
showDialogMSG("您覺(jué)得她很漂亮");
}
});
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
break;
case R.id.BtnList :
builder.setTitle("列表框");
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
showDialogMSG("您選擇了ID為"+which+"的人,名字叫:"+items[which]);
}
});
break;
case R.id.btnRidio:
mSingleChoiceID = -1;
builder.setTitle("單選框");
builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
mSingleChoiceID=which;
showDialogMSG("您選擇了ID是"+mSingleChoiceID+",名字為:"+items[which]);
}
});
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
if(mSingleChoiceID>-1)
{
showDialogMSG("您最終選擇的是"+items[mSingleChoiceID]);
}else
{
showDialogMSG("您最終選擇的是"+items[0]);
}
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
break;
case R.id.btnCheck :
MultiChoiceID.clear(); //先清空集合
builder.setTitle("多項(xiàng)選擇");
builder.setMultiChoiceItems(items,new boolean[]{false,false,false,false,false,false}, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked)
{
MultiChoiceID.add(which);
showDialogMSG("您選擇了"+items[which]);
}else
{
MultiChoiceID.remove(which);
}
}
});
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String str="";
for(int i = 0;i<MultiChoiceID.size();i++)
{
str+=items[MultiChoiceID.get(i)]+",";
}
//去掉最后一個(gè)","
if(str.length()>0){
str = str.substring(0,str.length()-1);
}
showDialogMSG("你一共選擇的有"+str);
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
break;
case R.id.BtnProgressbar:
mProgressDialog =new ProgressDialog(MainActivity.this);
mProgressDialog.setTitle("進(jìn)度條窗口");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//設(shè)置樣式
mProgressDialog.setMax(MAX_PROGRESS);//設(shè)置最大值
mProgressDialog.setButton("確定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//這里添加點(diǎn)擊后的邏輯
}
});
mProgressDialog.setButton2("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//這里添加點(diǎn)擊后的邏輯
}
});
mProgressDialog.show();
new Thread().start();
return;
case R.id.btnCustom:
break;
case R.id.btnRead:
break;
}
builder.create().show();//創(chuàng)建并顯示彈出框
}
}
}
布局文件部分,比較簡(jiǎn)單:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:id="@+id/btnConfim"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="確定/取消"
/>
<Button
android:id="@+id/btnMore"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="多個(gè)消息提示"
/>
<Button
android:id="@+id/BtnList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="列表框"
/>
<Button
android:id="@+id/BtnProgressbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="進(jìn)度條框"
/>
<Button
android:id="@+id/btnRidio"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="單選框"
/>
<Button
android:id="@+id/btnCheck"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="多選框"
/>
<Button
android:id="@+id/btnCustom"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="自定義布局"
/>
<Button
android:id="@+id/btnRead"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="讀取進(jìn)度框"
/>
</LinearLayout>
相關(guān)文章
基于Android studio3.6的JNI教程之helloworld思路詳解
這篇文章主要介紹了基于Android studio3.6的JNI教程之helloworld,本文通過(guò)圖文實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03Android 通過(guò)jni返回Mat數(shù)據(jù)類型方法
今天小編就為大家分享一篇Android 通過(guò)jni返回Mat數(shù)據(jù)類型方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Android性能優(yōu)化之捕獲java crash示例解析
這篇文章主要介紹了Android性能優(yōu)化之捕獲java crash示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Android中RecyclerView拖拽、側(cè)刪功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android中RecyclerView拖拽、側(cè)刪功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-09-09詳解Android跨進(jìn)程IPC通信AIDL機(jī)制原理
本篇文章主要介紹了詳解Android跨進(jìn)程IPC通信AIDL機(jī)制原理,詳細(xì)的介紹了AIDL的概念和使用,具有一定的參考價(jià)值,有興趣的可以了解一下2018-01-01Android 中LayoutInflater.inflate()方法的介紹
這篇文章主要介紹了Android 中LayoutInflater.inflate()方法的介紹的相關(guān)資料,希望通過(guò)本文大家能掌握這部分內(nèi)容,需要的朋友可以參考下2017-09-09在ubuntu下編譯ijkplayer-android的方法
下面小編就為大家分享一篇在ubuntu下編譯ijkplayer-android的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Android實(shí)現(xiàn)圓形純數(shù)字按鈕
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)圓形純數(shù)字按鈕,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02Material Design系列之Behavior上滑顯示返回頂部按鈕
這篇文章主要為大家詳細(xì)介紹了Material Design系列之Behavior上滑顯示返回頂部按鈕的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09