2012-01-16 120 views
1

我需要有一個對話框(它是一個遊戲對話框),其中按鈕位於對話框的下角。不是裏面的對話框,而是在角落(即按鈕的一部分將駐留在對話框上並且該部分將在其外面)。Android。如何使對話框按鈕出現在對話框外部

+0

是否使用AlertDialog.Builder爲你的對話? – Josh 2012-01-16 14:39:30

+0

我試過建設者和佈局。我對這個機制沒有限制。我會使用任何將幫助我實現所需的外觀 – Taras 2012-01-16 14:47:17

回答

1

下面是一個簡單的佈局,我嘗試:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 

    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
<FrameLayout 
android:orientation="vertical" 
android:id="@+id/ll1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:drawable/dialog_frame"> 
</FrameLayout> 
<Button android:layout_width="wrap_content" 
android:id="@+id/button1" 
android:layout_height="wrap_content" 
android:layout_marginTop="35dp" 
android:layout_centerHorizontal="true" 
    android:text="Button"></Button> 
</RelativeLayout> 

這裏是截圖: layout sample

希望你得到暗示,古德勒克

+0

試過並且工作正常,除了我得到的對話框邊框包含了上面所有的圖形。我使用[本主題](http://stackoverflow.com/questions/1883425/android-borderless-dialog)的技巧來解決這個問題。謝謝您的幫助! – Taras 2012-01-17 09:04:42

+0

@Taras你可以發佈代碼嗎? – 2012-05-11 15:30:07

2

首先,據我所知,您不能將佈局子項移動到其父項之外。

我從來沒有嘗試過你要做什麼,但我認爲它可以做到。訣竅是使用對話主題的活動(可以在開發人員網站或API演示中找到這些示例)。確保你的佈局的根節點的寬度和高度設置爲wrap_content。你的根佈局應該是一個RelativeLayout並且沒有背景(android:background =「#0000」)。

接下來,添加另一個佈局到您的根節點(FrameLayout可能會工作)與一個自定義可繪製的背景(或使用默認對話框使用框架)和寬度和高度設置爲fill_parent或match_parent。將android:padding設置爲某個傾角值,將背景從對話框邊緣拉出。

剩下要做的唯一事情就是將其他佈局元素添加到根節點。 FrameLayout將被繪製在其他所有東西之下,並且填充將創建不包含您的UI的邊框幻覺。

更新 哎呀,剛剛嘗試了以上與好的和壞的結果。首先,你肯定會想看看 「自定義對話框」 例如,從API的演示,這使得使用:

創建一個使用上述xml佈局文件的活動,並將該活動的樣式設置爲您在xml/styles.xml中定義的Theme.CustomDialog。這會爲您的活動帶來紅色背景。然後,您可以編輯filled_box形狀文件,以將一個背景屬性設置爲不可見(「#0000」)。結果應該是沒有背景的對話形狀的活動。

接下來我試圖用上面的想法來破解背景。這個想法應該是在其他用戶界面元素背後繪製的虛假背景不包含它們,因此可以使用layout_margin「縮小」而不影響它們。這裏的問題是,假背景需要設置寬度和高度,相對於其他UI元素,因此它需要包含它們,所以它可以正確測量它們相對於它們的寬度和高度。

所以我認爲解決方案可以做大部分我上面所說的,但不要嘗試假背景的東西。只需使用9貼片可繪製爲您的根佈局背景,並縮小您的背景邊緣繪製比內容更遠。您仍然會使用上面的自定義主題內容和一個不可見的窗口主題。