2012-06-18 58 views
3

我優化我們的平板電腦的Android應用程序。對於大部分應用程序,我們使用的是片段,但對於某些設置屏幕,我們只想將屏幕作爲平板電腦的對話框啓動。爲了實現這一目標,我們設置了活動的主題,在清單如何設置活動最大高度(對話的主題)

<activity 
    android:name="com.company.app.EditTaxTypeSettingsActivity" 
    android:theme="@style/ActivityTheme"> 
</activity> 

而這裏的主題(在res /價值觀大-V11):使用此主題開放作爲

<?xml version="1.0" encoding="utf-8"?> 
<resources>   
    <style name="ActivityTheme" parent="@android:style/Theme.Holo.Light.Dialog">  
    <item name="android:windowIsFloating">true</item> 
    </style> 
</resources> 

活動一個對話框,並在橫向上看起來很好。但在縱向模式下,對話框垂直填充屏幕,看起來很傻。

如何設置這些對話框的最大高度?我嘗試過設置主題<item name="android:maxHeight">500dip</item>的maxHeight屬性,但它似乎指向活動內容周圍的對話框容器,而不是活動內容本身。 (即,如果我將活動主題的高度設置爲500dip,則對話框會得到一個非常大的對話框標題區域)

我也嘗試設置活動佈局xml(RelativeLayout)的大小,但我無法設置一個maxHeight,我只能設定的高度,但我不能有硬編碼的高度,因爲我有保存和取消設置爲android:layout_alignParentBottom="true",使他們能夠留在鍵盤上方時,鍵盤彈出按鈕。 (硬編碼的活動佈局的高度,防止保存/殘留在鍵盤頂部取消按鈕)

謝謝你,沒有人知道如何設置最高對話框高度,最好在主題級別?

+0

我很困惑,爲什麼你會使用'Fragment'本身作爲'Dialog'。只需使用'DialogFragment'。它會正確調整您需要的信息,以適應您要展示的內容。 – Andy

+0

@安迪 - 它們是爲手機設計的活動。我們不想開始一個全新的活動(佔用只有少量信息的整個平板電腦屏幕)。由於它們作爲對話而非片段更好地工作,因此我們決定不將電話活動轉換爲片段,而是希望活動以對話形式打開。所以他們是活動,而不是片段。謝謝。 – Dittimon

+0

哦,好吧,我得到你。所以你說的是你仍然會有活動,但是你希望手機設計的活動成爲平板電腦的對話框? – Andy

回答

2

使用此方法來修復Window的高度與對話的主題您的活動。

public static void maxinumDialogWindowHeight(Window window) { 
    WindowManager.LayoutParams layout = new WindowManager.LayoutParams(); 
    layout.copyFrom(window.getAttributes()); 
    layout.height = WindowManager.LayoutParams.FILL_PARENT; 
    window.setAttributes(layout); 
} 

而且使用後setContentView()(將窗口布局重置爲wrap_content):

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.messages); 
    if (getWindow().isFloating()) ViewHelper.maxinumDialogWindowHeight(getWindow()); 

    // rest of your code... 
}