2009-09-01 102 views
127

我正在使用對話框主題設置的活動,我希望它是全屏。我嘗試了各種各樣的東西,甚至通過WindowManager將窗口手動展開爲全寬和全高,但沒有任何效果。如何獲得一個對話框樣式活動窗口來填充屏幕?

顯然,對話框窗口(或對話框主題的活動)只會根據其內容進行擴展,但即使這樣也不一定有效。例如,我展示了一個寬度和高度設置爲FILL_PARENT的進度條圓(其佈局容器也是如此),但對話框仍然圍繞着更小的進度條而不是填充屏幕。

必須有一種方法可以在對話框窗口內顯示一些小東西,但是在沒有調整內容大小的情況下,它會擴展到全屏尺寸嗎?

+2

有趣,注意: 當像素佈局容器的寬度和高度設置爲實際值,則對話框會相應調整大小但是,當它設置爲FILL_PARENT,那麼它不... – Matthias 2009-09-01 14:30:52

+0

我有點解決了問題的解決方法,但由於這不是一個好的解決方案,我會留下這個問題。 我所做的是將LinearLayout子類化並覆蓋其onMeasure()方法,該方法負責在佈局週期中確定視圖的大小並將其修復爲屏幕寬度和高度。這是不正確的,因爲這沒有考慮到菜單欄佔用的空間,所以容器實際上比屏幕上看起來更高(所有奇怪的副作用像兒童都消失在不可見的區域屏幕)。 – Matthias 2009-09-04 08:16:58

+0

我找到了正確的解決方案,請參閱下面的答案。 – Matthias 2009-11-07 17:08:34

回答

282

我找到了解決辦法:

在您的活動具有了Theme.Dialog樣式集,這樣做:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.your_layout); 

    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
} 

您致電Window.setLayout()後你打電話setContentView(),否則它贏得了這一點很重要」工作。

+4

謝謝你,救了我的時間,無處我早就想通了這一點!但任何想法,爲什麼我們必須在代碼中明確指定,爲什麼fill_parent不能通過xml的活動與主題對話框工作? – sat 2011-02-08 12:52:21

+3

我的對話框不會填充寬度,而不是通過XML,而不是通過這種方法。 我在吃我的指甲。 – eitama 2011-10-12 08:37:57

+6

這是:'import android.view.ViewGroup.LayoutParams;' – 2012-03-20 07:32:33

2

在最上面的佈局設置最小寬度。

android:minWidth="300dp" 

例如:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="300dp"> 

<!-- Put remaining contents here --> 

</LinearLayout> 
46

我只是想填補只有80%的屏幕爲我做了這樣的下面

 DisplayMetrics metrics = getResources().getDisplayMetrics(); 
     int screenWidth = (int) (metrics.widthPixels * 0.80); 

     setContentView(R.layout.mylayout); 

     getWindow().setLayout(screenWidth, LayoutParams.WRAP_CONTENT); //set below the setContentview 

它只能當我把getwindow ().setLayout ... line setContentView(..)下面

謝謝@Matthias

+1

看到我的答案,謝謝兄弟,正是我期待的4. :) – 2015-12-20 05:43:14

+1

非常感謝你!這對我工作:) – Woppi 2016-11-22 06:14:26

45

您可以添加此值以你的風格的Android:windowMinWidthMajor和android:windowMinWidthMinor

<style name="Theme_Dialog" parent="android:Theme.Holo.Dialog"> 
    ... 
    <item name="android:windowMinWidthMajor">96%</item> 
    <item name="android:windowMinWidthMinor">96%</item> 
</style> 

允許窗口是最小寬度,沿着屏幕的短軸。

+0

它爲我完美的工作。謝謝。 – PratikGandhi 2015-07-27 10:14:51

+1

只爲我工作的東西 – Murphybro2 2016-01-18 09:47:45

+1

最簡單的解決方案。它也與appcompat支持庫一起工作。謝謝。 – 2017-07-30 12:16:48

2

馬蒂亞斯的回答大多是正確的,但它仍然沒有填滿整個屏幕,因爲它在每邊都有一個小填充(由@Holmes指出)。除了他的代碼之外,我們還可以通過擴展Theme.Dialog樣式來修復這個問題,並添加一些像這樣的屬性。

<style name="MyDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

然後我們簡單地設定的主題活動申報到MyDialog

<activity 
    android:name=".FooActivity" 
    android:theme="@style/MyDialog" /> 
6

對於對話框 這可能對別人有幫助的。 我想要一個對話框來取得整個屏幕的寬度。搜查了很多,但沒有發現有用。最後這對我有效:

mDialog.setContentView(R.layout.my_custom_dialog); 
mDialog.getWindow().setBackgroundDrawable(null); 

添加後,我的對話框出現在全屏幕。

1

這會對像我這樣的人有幫助。創建自定義對話框樣式:

<style name="MyDialog" parent="Theme.AppCompat.Light.Dialog"> 
    <item name="windowNoTitle">true</item> 
    <item name="android:windowFullscreen">true</item> 
    <item name="android:windowIsFloating">false</item> 
</style> 

AndroidManifest.xml文件被通緝活動集主題:

<activity 
     android:name=".CustomDialog" 
     ... 
     android:theme="@style/MyDialog"/> 

這是所有,無需programaticaly調用方法。

+0

仍然顯示填充每邊(頂部,右側,底部和左側),如果我們也需要顯示狀態欄,這個解決方案將失敗 – HendraWD 2016-09-20 08:32:16

1

這個答案是對那些誰使用「Theme.AppCompat.Dialog」解決方法或任何其他「Theme.AppCompat.Dialog」後裔像「Theme.AppCompat.Light.Dialog」,「Theme.AppCompat.DayNight .Dialog「等。 我自己必須使用AppCompat對話框,因爲我使用AppCompatActivity作爲所有活動的延伸。如果我們使用接受的答案,會出現一個問題,使得對話框的每一邊都有填充(頂部,右側,底部和左側)。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.your_layout); 

    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
} 

您的活動的風格,添加這些代碼

<style name="DialogActivityTheme" parent="Theme.AppCompat.Dialog"> 
    <item name="windowNoTitle">true</item> 
    <item name="android:windowBackground">@null</item> 
</style> 

正如你可能會注意到,產生填充到我們的對話框的問題是「機器人:windowBackground」,所以在這裏我使窗口背景空值。

+0

是的,這是我的情況。謝謝:) – mohnage7 2017-10-31 11:26:11

6

包裝你dialog_custom_layout.xmlRelativeLayout的,而不是任何其他layout.That爲我工作。

+0

同樣在這裏,寬度和高度是完全錯誤的,無法弄清楚如何解決。將根佈局轉換爲RelativeLayout也解決了我的問題! – SharpMobileCode 2017-09-15 18:27:32

0

在您的清單文件,其中我們的活動被定義

<activity 
     android:name=".YourPopUpActivity" 
     android:theme="@android:style/Theme.Holo.Dialog" > 
    </activity> 

沒有行動吧

<activity android:name=".YourPopUpActivity" 
      android:theme="@android:style/Theme.Holo.Dialog.NoActionBar"/> 
相關問題