2010-09-16 47 views
39

我想徹底重新安裝Android中的默認對話框組件。具體而言,我想這樣做:如何在Android中創建完全自定義的對話框/彈出窗口(更改疊加層顏色和對話框窗口布局)

  • 將半透明疊加層背景從默認黑色更改爲半透明白色。

  • 變化由 刪除默認窗框架的邊框, 並與XML定義的佈局 替換它的對話窗口(它只是將是 一個無國界的圖形與浮動 按鈕。沒有實際的框架。)

我看到教程關於對話框(如http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application)中創建自定義佈局,但我還沒有看到關於改變疊加的顏色和/或完全自定義彈出的對話窗口什麼並把它變成一個疊加y沒有「窗口」。

回答

82

我已經解決了這個問題,並使用以下步驟創建自己的自定義彈出覆蓋了定製顏色的半透明疊加背景:

1 - 創建您的RES /價值/文件夾一個新的XML文件和將其命名爲styles.xml

2 - 這裏是您定義對話框屬性的位置。這是我的樣子。如果您想要替換在屏幕上顯示的默認半透明黑色疊加層,則必須將windowIsFloating設置爲false,並將佈局的背景修改爲您想要的任何顏色。這是我的低於文件我用:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="CustomDialogTheme" parent="@android:style/Theme.Dialog"> 
     <item name="android:windowBackground">@color/transparent_white</item> 
     <item name="android:windowIsFloating">false</item> 
     <item name="android:windowNoTitle">true</item> 
    </style> 
</resources> 

3 - 早在你的java代碼,創建對話框對象時,使用經過雙方的背景和主題的構造。例如。 myDialog = new Dialog(this, R.style.CustomDialogTheme);(CustomDialogTheme是我在步驟2的styles.xml中指定的名稱屬性)

4 - 只需將對話框對象內容視圖設置爲您希望對話框看起來像的任何佈局。例如。 myDialog.setContentView(R.layout.my_custom_overlay); 如果你希望你的對話框出現在屏幕的中央,設置它的根元素的android:layout_gravitycenter

+4

這擺脫了邊界,但它仍然留下了我的佈局周圍的黑色線..任何想法? – 2011-11-18 20:56:03

19

這對我的工作不錯,但缺少如何關閉對話框。如果您的自定義佈局中有一個按鈕關閉它,那麼以下是如何添加偵聽器並關閉對話窗口。

final Dialog d = new Dialog(this,R.style.CustomDialogTheme); 
d.setContentView(R.layout.custom_dialog); 
d.show(); 

Button close_btn = (Button) d.findViewById(R.id.close_btn); 
close_btn.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     d.dismiss(); 
    } 
}); 
+1

感謝您添加額外的信息:) – justinl 2011-01-10 02:01:02