Android Dialog對話框

来源:https://www.cnblogs.com/94xiyang/archive/2018/08/21/9509810.html
-Advertisement-
Play Games

Dialog的基本方法 系統樣式 1.下拉列表 2.單選框列表 3.多選框列表 4.等待對話框 5.進度條對話框 自定義Dialog 1.繼承Dialog 2.自定義Style 3.自定義佈局 4.ipad隱藏底部虛擬按鍵 5.使用自定義Dialog ...


Dialog的基本方法

//創建Dialog
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

//設置標題圖標
builder.setIcon(R.drawable.ic_launcher);

//設置標題
builder.setTitle("這是一個對話框");

//設置信息
builder.setMessage("是否要跳轉?");

//確定按鈕
setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)

//取消按鈕
setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener)

//忽略
setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener)

//顯示對話框
show();

系統樣式

1.下拉列表

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
         builder.setIcon(R.drawable.ic_launcher);
         builder.setTitle("選擇一個城市");
         //下拉列表的數據源
         final String[] cities = {"北京", "上海", "廣州", "深圳", "杭州"};
         builder.setItems(cities, new DialogInterface.OnClickListener(){
             @Override
             public void onClick(DialogInterface dialog, int which){
                 Toast.makeText(MainActivity.this, "你選擇的城市為:" + cities[which], Toast.LENGTH_SHORT).show();
             }
 });
 builder.show();

2.單選框列表

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setIcon(R.drawable.ic_launcher);
        builder.setTitle("請選擇性別");
        final String[] sex = {"男", "女"};
        //第二個參數指定預設哪個單選框被勾中
        builder.setSingleChoiceItems(sex, 1, new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which){
                   Toast.makeText(MainActivity.this, "性別為:" + sex[which], Toast.LENGTH_SHORT).show();
            }
        });
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which){
                        
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which){
                        
            }
       });
builder.show();

3.多選框列表

String str;
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("選擇你想看的電視劇"); final String[] hobbies = {"廷禧攻略", "扶搖", "香蜜沉沉燼如霜", "如懿傳"}; //第二個參數代表哪幾個選項被選擇,需要傳遞一個boolean[]數組進去,其長度要和第一個參數的長度相同,如果null表示都不選 builder.setMultiChoiceItems(hobbies, null, new DialogInterface.OnMultiChoiceClickListener(){   @Override   public void onClick(DialogInterface dialog, int which, boolean isChecked){   if(isChecked){     str.append(hobbies[which] + ", ");   }   Toast.makeText(MainActivity.this, "選擇的是:" + str.toString(), Toast.LENGTH_SHORT).show(); } }); builder.setPositiveButton("確定", new DialogInterface.OnClickListener(){   @Override   public void onClick(DialogInterface dialog, int which){ } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener(){   @Override   public void onClick(DialogInterface dialog, int which){ } }); builder.show();

 4.等待對話框

ProgressDialog waitingDialog= new ProgressDialog(MainActivity.this);
waitingDialog.setTitle("等待載入中,請稍後...");
waitingDialog.setMessage("等待中...");
waitingDialog.setIndeterminate(true);//採用不確定式的進度條
waitingDialog.setCancelable(false);//點擊外部不取消對話框
waitingDialog.show();

5.進度條對話框

int MAXPD = 100;
ProgressDialog progressDialog =  new ProgressDialog(MainActivity.this);
progressDialog.setProgress(0);//設置預設值
progressDialog.setTitle("正在下載");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//進度條樣式
progressDialog.setMax(MAXPD);//設置最大值
progressDialog.show();

自定義Dialog

1.繼承Dialog

public class CustomDialog extends Dialog {
//標題
protected TextView hintTv;

//左邊按鈕
protected Button doubleLeftBtn;

//右邊按鈕
protected Button doubleRightBtn;

//輸入框
public EditText editText;

public CustomDialog(Context context) {
    super(context, R.style.CustomDialogStyle);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setCancelable(false);  // 是否可以撤銷
    setContentView(R.layout.dialog_custom);

    hintTv = findViewById(R.id.tv_common_dialog_hint);
    doubleLeftBtn =  findViewById(R.id.btn_common_dialog_double_left);
    doubleRightBtn = findViewById(R.id.btn_common_dialog_double_right);
    editText = findViewById(R.id.et_common_dialog);
}

//置右鍵文字和點擊事件
public void setRightButton(String rightStr, View.OnClickListener clickListener) {
    doubleRightBtn.setOnClickListener(clickListener);
    doubleRightBtn.setText(rightStr);
}

//設置左鍵文字和點擊事件
public void setLeftButton(String leftStr, View.OnClickListener clickListener) {
    doubleLeftBtn.setOnClickListener(clickListener);
    doubleLeftBtn.setText(leftStr);
}

//設置提示內容
public void setHintText(String str) {
    hintTv.setText(str);
    hintTv.setVisibility(View.VISIBLE);
}

//給兩個按鈕 設置文字
public void setBtnText(String leftStr, String rightStr) {
    doubleLeftBtn.setText(leftStr);
    doubleRightBtn.setText(rightStr);
}

}

2.自定義Style

<style name="CustomDialogStyle" parent="@android:style/Theme.Dialog">
        <!-- 邊框 -->
        <item name="android:windowFrame">@null</item>

        <!-- 背景透明 -->
        <item name="android:windowBackground">@color/transparent</item>

        <!-- 無標題 -->
        <item name="android:windowNoTitle">true</item>

        <!-- 是否浮現在activity之上 -->
        <item name="android:windowIsFloating">true</item>

        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">false</item>

        <!-- 背景模糊 -->
        <item name="android:windowContentOverlay">@null</item>

        <!-- 允許對話框的背景變暗 -->
        <item name="android:backgroundDimEnabled">true</item>

        <!-- 字體顏色 -->
        <item name="android:textColor">@color/white</item>
        <item name="android:editTextColor">@color/white</item>
 </style>

3.自定義佈局

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ll_common_dialog_layout"
    android:layout_width="500dp"
    android:layout_height="250dp"
    android:layout_margin="5dp"
    android:background="@drawable/background_info"
    android:orientation="vertical"
    android:gravity="center">

    <!--提示信息-->
    <TextView
        android:id="@+id/tv_common_dialog_hint"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@color/white"
        android:textSize="27sp"/>
    <EditText
        android:id="@+id/et_common_dialog"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:textColor="@color/back"
        android:inputType="text|textNoSuggestions"
        tools:ignore="LabelFor"
        android:hint="請輸入密碼"/>
    
    <!--底部按鈕-->
    <LinearLayout
        android:id="@+id/ll_common_dialog_double"
        android:layout_width="360dp"
        android:layout_height="60dp"
        android:layout_margin="20dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_common_dialog_double_left"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/btnselector"
            android:gravity="center"
            android:textColor="@color/white"
            android:textSize="27dp"/>

        <Button
            android:id="@+id/btn_common_dialog_double_right"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/btnselector"
            android:gravity="center"
            android:textColor="@color/white"
            android:textSize="27dp"/>
    </LinearLayout>
</LinearLayout>

4.ipad隱藏底部虛擬按鍵

//彈出dialog時隱藏底部虛擬按鍵
dialog.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
dialog.getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
    @Override
    public void onSystemUiVisibilityChange(int visibility) {
        int uiOptions =View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
        if (Build.VERSION.SDK_INT >= 19) {
            uiOptions |= 0x00001000;
        } else {
            uiOptions |= View.SYSTEM_UI_FLAG_LOW_PROFILE;
        }
        dialog.getWindow().getDecorView().setSystemUiVisibility(uiOptions);
    }
});

5.使用自定義Dialog

CustomDialog dialog = new CustomDialog(this);
dialog.setHintText("請輸入密碼");
dialog.setLeftButton("取消", new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           dialog.dismiss();
       }
});
dialog.setRightButton("確定", new View.OnClickListener() {
        @Override
        public void onClick(View v) {
               
        }
});
dialog.show();

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉載請標明出處: http://blog.csdn.net/lmj623565791/article/details/50709663; 本文出自:【張鴻洋的博客】 一、概述 隨著Android 6.0發佈以及普及,我們開發者所要應對的主要就是新版本SDK帶來的一些變化,首先關註的就是許可權機制的變化 ...
  • 問題 今天小編遇到了這麼個問題,就是在用戶使用App參加考試的時候調用攝像頭抓拍用戶是否作弊,其實這也沒什麼,關鍵在於不能打擾用戶考試,不能被用戶發現什麼時候抓拍的,也不能給用戶查看圖片,只有考完是後才能查看。這系統相當於考駕照時的上機答題部分。開始經理的要求是調用小程式外部的手機拍攝功能,這要可把 ...
  • "Android項目刮刮獎詳解(三)" 前言 上一期我們已經是完成了刮刮卡的基本功能,本期就是給我們的項目增加個功能以及美化一番 目標 + 增加功能 用戶刮卡刮到一定程度的時候,清除遮蓋層 + 在遮蓋層放張圖片,增加用戶體驗 + 增加一個刮完獎回調監聽 實現 1.自動消除效果 我們首先來瞭解一下bi ...
  • 公司規模 3000人以上 全國500強。 從總部剛交接過來的代碼。 1、找不到代碼。代碼部分丟失。(由於沒有交接,沒有任何相關文檔,花了一天確定代碼丟失。從總部找到部分代碼) 2、查找測試庫,發現測試庫不行了,尋求伺服器運維組幫忙,,首先開通了 外網訪問的安全限制, 半天時間 3、查找防火牆,發現服 ...
  • ListView的三種適配器 ArrayAdapter 支持list集合,只能展現一行文字 SimpleAdapter 具有擴展性,可以自定義多種效果 BaseAdapter 抽象類,繼承這個類並且重寫相關方法 常用屬性 android:divider 設置分割線的顏色或圖片 android:div ...
  • stetho可以使用chrome調試webview,有網友反映國內不行,親測了一下是有解決方法的: Chrome://inspect 打開後會發現stetho的頁面: 點擊inspect,如果沒有Fan牆或使用離線開發者工具包,會出現空白或404頁面: Fan牆或使用離線開發者工具包後,還有個小坑, ...
  • "Android項目刮刮獎詳解(二)" 前言 上一期我們已經實現了一個簡易的刮刮卡功能,這一期我們來將其完善一下 目標 + 將刮刮獎的寬高改為合適高度 + 將刮刮獎位置居中 + 將信息層的圖片換成文字(重點) 實現 1. 將刮刮獎的寬高改為合適高度和將刮刮獎位置居中 這裡其實很簡單,我們直接到lay ...
  • 我在build.gradle中添加 apply plugin: 'realm-android' //依賴Realm資料庫,插件化依賴 這個後,同步,清理,運行的時候報 應該在build.gradle(Project)裡面添加classpath 但是在rebuild的之後還是報錯 原來是realm-a ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...