2010-07-19 74 views
12

我在遊戲結束時顯示了一個自定義警報對話框,以便玩家可以輸入其名稱以保存它。問題是當我打電話給show()出現對話框,但它不是垂直居中!這比它應該低一點,不管我在xml中設置什麼屬性或使用setGravity()自定義警報對話框不在Android上垂直居中

我覺得這是同樣的問題the one mentioned here,也沒有人給一個合適的回答。

感謝您的幫助。

有關詳細信息,這裏是我的代碼:

AlertDialog.Builder builder; 

    LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.newrecord,(ViewGroup)findViewById(R.layout.shoot)); 

    builder = new AlertDialog.Builder(this); 
    builder.setView(layout); 

    newRecDialog = builder.create(); 

這裏是newrecord.xml的XML佈局的第一個元素的代碼:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:gravity="center" 
android:padding="10dp" 
android:baselineAligned="true"> 

這裏是輸出截圖: alt text http://the.niox.free.fr/divers/dialog_offset.png

回答

0

將您的AlertDialog上的屬性設置爲android:gravity="center"或編程設置爲setGravity(Gravity.CENTER)。此重力只適用於您的佈局,而不適用於您的手機的顯示。如果您使用自定義標題,它看起來不像中心垂直。

+0

我想這一切已經它不起作用。我的XML文件實際上是我膨脹的對話框內容的描述,這是錯誤的嗎? – NioX5199 2010-07-19 13:40:58

+0

我無法正確理解你。但是,無論如何,視圖的內容不會影響重力。所以請發佈你的代碼。我會嘗試。 – Praveen 2010-07-19 13:47:24

+0

@ NioX5199:你可以發佈你的輸出的屏幕截圖嗎? – Praveen 2010-07-19 14:46:31

0

不是一個真正的答案,但我有一個類似的問題。它似乎是居中,但它假定AlerterDialog有一個標題集。就我而言,我只是設定了一個標題。

3

該缺陷被描述here。 AlertDialog即使在沒有標題和圖標的情況下也爲標題/圖標面板保留空間。

的解決方法是,我認爲,很簡單:它應該在頂部面板佈局設置爲走了,只是因爲它在那裏是沒有按鈕的情況下,該按鈕面板。在這之前,唯一的解決方法是實現自己的Dialog子類。

+0

頂部面板?你如何設置頂部面板佈局? – ThePerson 2012-04-01 21:50:22

2

您可以使用一個活動,而不是自定義提醒。你必須設置活性對話的主題在Android清單文件:

android:theme="@android:style/Theme.Dialog" 

而且,您可以根據自己的需要調整活動XML佈局。

0

你可以嘗試使用AlertDialog.Builder.setCustomTitle(View);代替setView?我們使用它,因爲警告對話框比空標題對話框看起來好一點。

0

你應該使用下面這行中的XML 首先從你的XML刪除填充線,之後

android:layout_gravity="center" 
在此之後

您的對話框將會出現在中心,如果你使用的是緣自左等比刪除和如果您正在使用

android:layout_width="fill_parent" 

比用

android:layout_width="wrap_content" 
改變

之後,您的對話框將顯示在中心。

0

嘗試:

newRecDialog.getWindow().getAttributes().gravity = Gravity.CENTER; 
2

如果你實現了自己的對話框行 requestWindowFeature(Window.FEATURE_NO_TITLE)隱藏標題面板和對話框中心的屏幕上。也許它也適用於AlertDialog。

1

android:theme =「@ android:style/Theme.Dialog」

0

您需要禁用窗口標題。 首先創建一個自定義樣式爲您的對話框(請務必使用適合您的需求父主題):

<style name="CustomDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowNoTitle">true</item> 
</style> 

然後你的樣式應用到對話框建設者:

AlertDialog.Builder builder; 

LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE); 
View layout = inflater.inflate(R.layout.newrecord,(ViewGroup)findViewById(R.layout.shoot)); 

builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.CustomDialog)); 
builder.setView(layout); 

newRecDialog = builder.create();