web-dev-qa-db-ja.com

画面いっぱいにダイアログスタイルのアクティビティウィンドウを取得するにはどうすればよいですか?

ダイアログテーマが設定されたアクティビティを使用していますが、フルスクリーンにしたいです。 WindowManagerを介してウィンドウを手動で最大の幅と高さに拡張することも含め、あらゆる種類のことを試しましたが、何も機能しません。

どうやら、ダイアログウィンドウ(またはダイアログテーマのアクティビティ)は、その内容に応じてのみ拡大しますが、それでも常に機能するとは限りません。たとえば、幅と高さをFILL_PARENTに設定した進行状況バーの円を表示します(レイアウトコンテナーも同様)が、それでもダイアログは画面いっぱいに表示されるのではなく、はるかに小さい進行状況バーを折り返します。

ダイアログウィンドウ内に小さなものを表示する方法が必要ですが、コンテンツのサイズを変更せずにフルスクリーンサイズに拡大する必要がありますか?

134
Matthias

私は解決策を見つけました:

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()を呼び出すことが重要ですaftersetContentView()を呼び出すと、機能しなくなります。

306
Matthias

この値をスタイルAndroid:windowMinWidthMajorおよびAndroid:windowMinWidthMinorに追加できます

<style name="Theme_Dialog" parent="Android:Theme.Holo.Dialog">
    ...
    <item name="Android:windowMinWidthMajor">97%</item>
    <item name="Android:windowMinWidthMinor">97%</item>
</style>
62

私は以下のようにしたために画面の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

getContent()。setLayout ...行をsetContentView(..)の下に配置した場合にのみ機能します

ありがとう@Matthias

50
Padma Kumar

dialog_custom_layout.xmlを他のレイアウトの代わりにRelativeLayoutにラップします。

11
Ayan

ダイアログ用これは誰かに役立つかもしれません。ダイアログが画面の幅いっぱいに表示されるようにします。たくさん検索しましたが、有用なものはありませんでした。最後に、これは私のために働いた:

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

これを追加すると、ダイアログが画面全体に表示されます。

8
Rahul Sharma

この答えは回避策です「Theme.AppCompat.Dialog」または他の「Theme.AppCompat.Dialog」の子孫を使用する場合「Theme.AppCompat.Light.Dialog」、「Theme.AppCompat。」 DayNight.Dialog」など。私はAppCompatActivityをすべてのアクティビティの拡張として使用するため、私自身はAppCompatダイアログを使用する必要があります。受け入れられた回答を使用すると、ダイアログのすべての側面(上、右、下、左)にパディングが発生するという問題が発生します。

@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>

お気づきかもしれませんが、ダイアログのパディングを生成する問題は「Android:windowBackground」なので、ここではウィンドウの背景をnullにします。

3
HendraWD

Matthiasの答えはほとんど正しいですが、各サイドに小さなパディングがあるため(@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を宣言します。

<activity
    Android:name=".FooActivity"
    Android:theme="@style/MyDialog" />
2
DYS

最上部のレイアウトで最小幅を設定します。

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>
2
roy mathew

これは私のような人に役立つでしょう。カスタムダイアログスタイルを作成します。

<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"/>

それがすべてであり、メソッドをプログラムで呼び出す必要はありません。

1
Stanojkovic

アクティビティが定義されているマニフェストファイル内

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

アクションバーなし

<activity Android:name=".YourPopUpActivity"
            Android:theme="@Android:style/Theme.Holo.Dialog.NoActionBar"/>
0
Makvin