[Android] Material 風格的 Dialog 的使用


前言

谷歌發(fā)布了 Material Design 設計之后钦扭,很多 Material 風格的控件也隨之加入到了 V7 兼容包中.

Android Support Library v22.1 中開始提供了 Material 風格的 Dialog 控件 剪验。

這為開發(fā)者提供了很好的支持,省去了使用開源庫或自己設計的煩惱。

下面我們來看看如何使用 Material 風格的 Dialog 饺鹃。


兼容的 AlertDialog

擁有Material風格的Dialog控件在下列類:

android.support.v7.app.AlertDialog

所以想要使用此風格的對話框彼水,需要在Module的build.gradle中導入

dependencies {
    compile 'com.android.support:appcompat-v7:23.1.1'
}

這個 V7 包中的 AlertDialog 在 Android 2.1 以上可以提供兼容性的 Material 風格 Dialog 。

也就是說幸缕,使用這個包中的 AlertDialog 的話群发,從2.1到6.0都是 Material風格的 Dialog 晰韵。

當使用這個包中的 AlertDialog 時:

(下圖左邊為4.4,右邊為5.1)


非兼容的 AlertDialog

如果直接使用

android.app.AlertDialog

使用這個包中的 AlertDialog 的話 在 Android 5.0 以下就是原始風格熟妓, 5.0 以上為 Material 風格雪猪。

我們來看看對比圖:

(下圖左邊為4.4,右邊為5.1)


實例

在選擇導入包的時候決定了這個是否兼容低版本起愈,因為 Android 碎片化的原因只恨,推薦使用V7包中的AlertDialog達到高低版本統(tǒng)一樣式的效果。 這里用一個簡單的Demo樣式創(chuàng)建一個Dialog并顯示的過程抬虽。

/**
* 這是兼容的 AlertDialog
*/
private void showDialog() {
  /*
  這里使用了 android.support.v7.app.AlertDialog.Builder
  可以直接在頭部寫 import android.support.v7.app.AlertDialog
  那么下面就可以寫成 AlertDialog.Builder
  */
  android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this);
  builder.setTitle("Material Design Dialog");
  builder.setMessage("這是 android.support.v7.app.AlertDialog 中的樣式");
  builder.setNegativeButton("取消", null);
  builder.setPositiveButton("確定", null);
  builder.show();
}

常用方法的解釋

通過Builder得到對象之后可以進行各種屬性的設置官觅,來看看都有哪些屬性可供調(diào)整。

show

進行顯示Dialog阐污。如果在未設置其他屬性的情況下直接使用show休涤,會顯示一個隱形Dialog,不過背景色會被透明黑色覆蓋笛辟。


setTitle

設置Dialog的標題功氨,使用一串文本或者。如:
builder.setTitle("這里是Title");

setMessage

設置Dialog的內(nèi)容手幢,使用一串文本捷凄。如:
builder.setMessage("這里是Message");

setNegativeButton

設置否定按鈕,第一個參數(shù)為按鈕文本弯菊,第二個參數(shù)為按鈕被點擊的監(jiān)聽器類纵势。如:
builder.setNegativeButton("取消", null);

setPositiveButton

設置肯定按鈕,第一個參數(shù)為按鈕文本管钳,第二個參數(shù)為按鈕被點擊的監(jiān)聽器類钦铁。如:
builder.setPositiveButton("確定", null);


谷歌使用這兩個方法來定義肯定和否定按鈕,一定程度上是為了統(tǒng)一肯定和否定按鈕所在的方向才漆,肯定按鈕統(tǒng)一在右邊牛曹,因為通常是右手操作,否定按鈕統(tǒng)一在左邊醇滥。這樣對用戶來說是比較統(tǒng)一的體驗黎比。

以上就是最為常用的幾個方法 , 接著往下看一些其他方法。


setNeutralButton

設置中性按鈕鸳玩,第一個參數(shù)為按鈕文本阅虫,第二個參數(shù)為按鈕被點擊的監(jiān)聽器類,這個按鈕默認被放置到Dialog的左下角不跟。如: builder.setNeutralButton("中性", null);

setView

設置一個自定義的View放置到message的下方颓帝,可以是一個View對象,也可以是一個view資源ID。 如:
builder.setView(new EditText(this));

setView(可設置邊距)

對于使用View對象的參數(shù)购城,還可以設置他的邊距吕座。 如:
builder.setView(new EditText(this),20,20,20,20);;

setMultiChoiceItems

第一個參數(shù)為列表項的文本數(shù)組,第二個參數(shù)為列表項默認情況下的選中狀態(tài)瘪板,為空則都不選中吴趴,第三個是列表項的監(jiān)聽器類。在使用這個方法的時候如果同時使用了setMessage方法會導致此方法無效侮攀,而只顯示setMessage的內(nèi)容锣枝。 如:
builder.setMultiChoiceItems(new String[]{"233333", "hahahaha"}, null, null);

setItems

第一個參數(shù)為列表項的文本數(shù)組,第二個參數(shù)為列表項的監(jiān)聽器類魏身。在使用這個方法的時候如果同時使用了setMessage方法會導致此方法無效惊橱,而只顯示setMessage的內(nèi)容蚪腐。 如:
builder.setItems(new String[]{"Item1", "Item2"}, null);

setIco

設置Dialog的圖標箭昵,可以使用資源文件 ID,也可以使用 Drawable 對象回季。 如: builder.setIcon(R.mipmap.ic_launcher);


自定義Dialog

有時候自帶的各種方法并不能滿足我們的Dialog的設計需求家制,這時候我們可以自己寫一個 xml 設計符合需求的Dialog。(僅為設計Dialog的Message部分泡一,并不是Dialog整體)

創(chuàng)建一個名為dialog的XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/dialog"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="horizontal">

  <TextView
    android:layout_margin="8dp"
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="你的銀行密碼:" />
  

  <EditText
    android:layout_margin="8dp"
    android:id="@+id/et"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />
</LinearLayout>

創(chuàng)建View對象與XML關聯(lián)

 LayoutInflater inflater = getLayoutInflater();
 View   dialog = inflater.inflate(R.layout.dialog,(ViewGroup) findViewById(R.id.dialog));
 EditText   editText = (EditText) dialog.findViewById(R.id.et);

將View設置到Dialog中

AlertDialog.Builder builder = new AlertDialog.Builder(this);
  builder.setTitle("這里是Title");
  builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
          Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_SHORT).show();
      }
  });
  builder.setView(dialog);
  builder.setIcon(R.mipmap.ic_launcher);
  builder.show();
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颤殴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鼻忠,更是在濱河造成了極大的恐慌涵但,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帖蔓,死亡現(xiàn)場離奇詭異矮瘟,居然都是意外死亡,警方通過查閱死者的電腦和手機塑娇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門澈侠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人埋酬,你說我怎么就攤上這事哨啃。” “怎么了写妥?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵拳球,是天一觀的道長。 經(jīng)常有香客問我珍特,道長祝峻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮呼猪,結果婚禮上画畅,老公的妹妹穿的比我還像新娘。我一直安慰自己宋距,他們只是感情好轴踱,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谚赎,像睡著了一般淫僻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上壶唤,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天雳灵,我揣著相機與錄音,去河邊找鬼闸盔。 笑死悯辙,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的迎吵。 我是一名探鬼主播躲撰,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼击费!你這毒婦竟也來了拢蛋?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤蔫巩,失蹤者是張志新(化名)和其女友劉穎谆棱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圆仔,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡垃瞧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荧缘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皆警。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖截粗,靈堂內(nèi)的尸體忽然破棺而出信姓,到底是詐尸還是另有隱情,我是刑警寧澤绸罗,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布意推,位于F島的核電站,受9級特大地震影響珊蟀,放射性物質發(fā)生泄漏菊值。R本人自食惡果不足惜外驱,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腻窒。 院中可真熱鬧昵宇,春花似錦、人聲如沸儿子。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柔逼。三九已至蒋譬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愉适,已是汗流浹背犯助。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留维咸,地道東北人剂买。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像腰湾,于是被迫代替她去往敵國和親雷恃。 傳聞我的和親對象是個殘疾皇子疆股,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容