android對話框背景
Ⅰ 【譯】Android材質組件的動手實踐:Dialogs
Android MDC 系列文章:
這篇文章將介紹 Dialogs 組件的功能和API。要了解如何處理Android的Material Components的初始設置(包括Gradle依賴關系和創建應用程序主題),請參閱我的原始文章:
為Android設置Material Components主題
對話框是組件,通常帶有模式窗口,顯示在應用程序內容的前面。它們用於告知用戶可能包含關鍵信息和/或需要做出決定的任務。它們有目的地打斷電流,並一直顯示在屏幕上,直到被解散或採取措施為止,因此應謹慎使用。
從設計的角度來看,可以在不同的場景中使用三種主要類型的對話框:
上面所有這些都具有共同的特徵:遮蓋應用程序內容的背景稀鬆布(可以選擇輕按以關閉對話框)和表面容器。
注意:存在第四種類型: 全屏對話框 。為此, 官方文檔 建議使用 *DialogFragment* 和資源限定符一起確定其顯示方式。這不在本文的討論范圍之內,因此不會涉及。
可以使用來實現所有上述對話框類型 MaterialAlertDialogBuilder 。該構建器類 AlertDialog 使用Material Design規范和主題來配置和實例化。
顯示對話框的基本方法如下:
配置更改(例如設備旋轉)後,上述方法將不會保留對話框。為了實現這一點,我們需要花一段 DialogFragment 時間使用 MaterialAlertDialogBuilder 來提供 Dialog :
DialogFragment 可以使用 導航體系結構組件 顯示,也可以通過 Fragment 或 Activity 通過以下方式手動顯示:
可以通過將參數傳遞給來實現上面(和更多)三種對話框中列出的所有特徵 MaterialAlertDialogBuilder 。下面列出了其中一些。
注意:在以下大多數情況下,將使用硬編碼值。該構建器還提供資源ID的重載。
注意:對話框的中間區域可以被支持文本或一組特定類型的項目佔用。這些不能合並。
存在幾個主題疊加層,用於更改對話框的總體布局。這些主題覆蓋變體繼承自 ThemeOverlay.MaterialComponents.MaterialAlertDialog ,每個都有一個可選的後綴:
實施全局自定義Material AlertDialog 主題疊加層時,請在您的應用程序主題中使用 materialAlertDialogTheme 屬性引用它。
另外,還有一個輔助 MaterialAlertDialogBuilder 構造函數,它接受覆蓋的主題資源ID:
可以使用三個「材料主題」子系統為主題設置「材料警報」對話框: 顏色 , 版式 和 形狀 。我們已經在上面的 「選擇主題疊加層」 部分中顯示了要使用 的主題疊加層 。除此之外, AlertDialog 可以通過擴展樣式並使用屬性 在 主題疊加層中引用自定義樣式。 MaterialAlertDialog.MaterialComponents``alertDialogStyle
有沒有具體的屬性自定義在一個對話框中使用的顏色,但 colorPrimary , colorSecondary , colorSurface 和各自的「關於」在您的應用程序使用的主題會自動調整對話框顏色顏色改變時。
對話框文本元素將採用 fontFamily 您在應用程序主題中定義的屬性。操作按鈕的樣式將根據 textAppearanceButton 您在應用主題中設置的樣式進行設置。
在主題疊加層中,您還可以使用 屬性為正文文本專門設置樣式。
可以使用該 shapeAppearance 屬性自定義對話框背景的形狀。默認為 。
我希望這篇文章對對話框以及如何在您的Android應用中使用對話框提供了一些見識。如果您有任何疑問,想法或建議,那麼我很樂意收到您的來信!
在Twitter上找到我 @ricknout
Ⅱ 誰說Android沒有好的對話框
我,怎麼樣
Ⅲ 安卓怎麼修改系統「DIALOG」風格
1、編寫一個文本樣式。
DIALOG的標題是一個textview,在sytles.xml中,添加如下代碼來設置你自己的文本樣式:
?
2、設置對弊虛話框的標題主題。
上面的標題文本並不能直接設置為對話框的標題樣式。 我們還需要編寫一個表示標題的主題的style,在這里指定標題的文本樣式。代碼如下:
?
3、設置對話框主題。
接下來,我們編寫我們的對話框主題,在這里指定標題的主題。由於一些屬性並不是public的,所以我們需要繼承自原來的某個style,代碼如下:
?
4、自定義App的主題。
接下來,我們需要在我們的App theme中指定我們的對話框使用這種主題,所以需要定義一個App theme。同樣由於App theme的許多屬性並不是public的(比如下面要提到的標題下面的那條藍線),所以我們要繼承自一個原生的style。這里我根據程序需要選擇了Theme.Holo.Light.NoActionBar,代碼如下:
?
5、指定App主題。
最後一步,我們需要在AndroidManifest.xml文件中,指定我們的app主題。這步很簡單,只需要在application標簽中指定android:theme的值即可,如下:
?
android:theme="@style/ParkingTheme"
不過這只是指定了Dialog的主題。如果是通過AlertDialog創建出來的對話框,主題還是原來的。所以我們還需要以下步驟。
7、編寫AlertDialog主題。
我們無法直接繼承系統主題里的AlertDialog的style。如把parent指定為Theme.DeviceDefault.Dialog.Alert,Theme.Holo.Dialog.Alert,Theme.DeviceDefault.Light.Dialog.Alert或Theme.Holo.Light.Dialog.Alert,都會導致編譯不過。所以我們需要繼承自Dialog的style。在這里我以Theme.Holo.Light.Dialog為例,代碼如下:
在這里我參考了原生的alertDialog的style,設定了窗口背景為透明,以及windowContentOverlay為null這兩個重要屬性,否則你會看到在AlertDialog下面還有一層對話框的背景,或者是對話框的背景遮住了所有內容這樣的問題存在。
8、指定AlertDialog的主題。
我們需要在第4步所說的自定義的AppTheme中,添加一行代碼來指定要使用的AlertDialog的style,代碼如下:
?
9、修改標題下面的藍色線。
如果你修改了對話框的主題顏色,那麼標題下面的藍色的線肯定會讓你很郁悶。如果對話框較少,你可以選擇隱藏標題,然後自定義一個包含了標題的View來設置為對話框的內容。但是如果你的對話框有許多種,判悔而且本來都是可以調用原來的API就來生成的話,要去定義這么多個帶標題的view,這樣做下來心裡肯定是很糾結的。
標題下面的藍色的線,並不是在Dialog或AlertDialog中設置或通過它們的style中定義的。它是定義在各種風格的dialog的layout當中,然後再在AppTheme裡面指掘卜正定dialog的對應屬性。遺憾的是,目前我看到這幾個相關屬性還不是public的,不能自己設置,所以只有通過Java代碼來實現了。
表示這條藍色的線的叫做titleDivider,我們可以通過getResources()的API來獲取它的IP,然後設置顏色。代碼如下:
?
public static final void dialogTitleLineColor(Dialog dialog, int color) {
Context context = dialog.getContext();
int divierId = context.getResources().getIdentifier("android:id/titleDivider", null, null);
View divider = dialog.findViewById(divierId);
divider.setBackgroundColor(color);
}這行代碼對於自定義的Dialog,可以在setContentView之後調用。但是對於AlertDialog,必須在show()方法被調用之後才可以去調用,否則會報錯。
Ⅳ Android UI開發中,設置Activity的什麼屬性可以使Activity顯示為對話框樣式.
將activity設置成對話框樣式,只需在activity屬性裡面增加下面一句代碼:
Ⅳ android設置dialog在第幾層顯示
android中dialog都是彈出的對話框,沒有第幾層這個概念,只有dialog有級別。
具體實現代碼:
1.創建對象框
AlertDialog.Builder builder = new Builder(context);
builder.setTitle("請輸入"); //設置對話框標題
builder.setIcon(android.R.drawable.btn_star); //設置對話框標題前的圖標
2.創建EditText輸入框
final EditText edit = new EditText(context);
3.將輸入框賦值給Dialog,並增加確定取消按鍵
builder.setView(edit);
builder.setPositiveButton("確認", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "你輸入的是: " + edit.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "你點了取消", Toast.LENGTH_SHORT).show();
}
});
4.設置常用api,並show彈出
builder.setCancelable(true); //設置按鈕是否可以按返回鍵取消,false則不可以取消
AlertDialog dialog = builder.create(); //創建對話框
dialog.setCanceledOnTouchOutside(true); //設置彈出框失去焦點是否隱藏,即點擊屏蔽其它地方是否隱藏
dialog.show();
Ⅵ android 的 AlertDialog 對話框樣式可以修改嗎
Android 提供了AlertDialog類可通過其內部類Builder輕松創建對話框窗口,但是沒法對這個對話框窗口進行定製,為了修改 AlertDialog 窗口顯示的外觀,解決的辦法就是創建一個指定的 AlertDialog 和 AlertDialog.Builder 類。
定義外觀
我們希望將上面默認的對話框外觀修改為如下圖所示的新對話框風格:
編寫對話框和 Builder 類