Androidの全画面DialogFragment


164

ほとんど全画面のDialogFragmentを表示しようとしています。しかし、どういうわけかできません。

私がフラグメントを表示している方法は、Android開発者のドキュメントから直接です

FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
    ft.remove(prev);
}
ft.addToBackStack(null);

// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");

フラグメントのRelativeLayoutをfill_parentといくつかのminWidthとminHeightに単純に設定しようとしたことは知っています。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"  
    android:minWidth="1000px" 
    android:minHeight="600px"
    android:background="#ff0000">

DialogFragmentが画面の大部分を占めることを期待しています。しかし、私は垂直方向にのみサイズ変更するようですが、水平方向に一定の幅になるまでのみです。

ここで提案されているように、コードでもウィンドウ属性を設定しようとしました:http : //groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec。しかし、これも助けにはなりませんでした。

私はAndroidがDialogsをどのように処理するかについて何かを誤解しています。どうすればこのようなことができますか?私の目標を達成するための代替方法はありますか?


Androidデバイス:
Asus EeePad Transformer
Android 3.0.1


更新: フラグメントに次のコードを含めて、フルスクリーンで表示できるようになりました

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}

残念ながら、これは私が望んでいるものではありません。背景を表示するには、ダイアログの周りに小さな「パディング」が必要です。

それを達成する方法はありますか?



あなたは私の時間を節約します、tysm
Arul Mani

回答:


73

LinearLayout代わりにに切り替えてみてくださいRelativeLayout。テスト時には3.0 Honeycomb apiをターゲットにしていました。

public class FragmentDialog extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button = (Button) findViewById(R.id.show);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            showDialog();
        }
    });
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

void showDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    DialogFragment newFragment = MyDialogFragment.newInstance();
    newFragment.show(ft, "dialog");
}

public static class MyDialogFragment extends DialogFragment {

    static MyDialogFragment newInstance() {
        MyDialogFragment f = new MyDialogFragment();
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_dialog, container, false);
        return v;
    }

}
}

レイアウトfragment_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:minWidth="1000dp"  
    android:minHeight="1000dp"> 
 </LinearLayout> 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:background="#ffffff">
    <Button android:id="@+id/show"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="show">
    </Button>
</LinearLayout>

そして私にとっては、RelativeLayoutを使用する必要がありましたが、ダイアログの幅がコンテンツに合わせて適切に調整されなかったため、RelativeLayoutを入れ子にしたのは、RelativeLayoutだけであるLinearLayoutでした。これにより、適切な幅調整がトリガーされました。
Peter Ajtai、2011

1
すべてをテストしましたが、DialogFragmentで機能したのは、レイアウト全体をLinearLayoutでラップすることだけでした。私は(今包まれた)元のレイアウト...この上の時間を無駄の幅と高さを設定でき、そのよう
ティル

6
minWidthとminHeightを何か大きなものに設定することは重要な部分のようです。しかし、これはクリーンなソリューションではなくハックです。以下の@Davidによって与えられた答え-彼が与えるリンクでさらに説明されています-も機能し、クリーンです。
Garlef Wegart 2014年

@ tir38 onCreateDialog()はすでにスーパークラスに実装を持っているので、そうではないと思います。
starkej2 2015年

これは受け入れられる答えになるはずです。精巧で明確
mutiemule

179

全画面でDialogFragmentを取得するには

onStart次のようにDialogFragmentをオーバーライドします。

@Override
public void onStart()
{
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}

そして、この投稿に感謝します:The-mystery-of-androids-full-screen-dialog-fragments


6
これは正確に機能しますが、Videoviewを試しましたが、機能しません。StatusBarは引き続き表示されます。したがって、これはコードの下で私を修正しました。
WhiteHorse

1
最後に整理し、提案に感謝します@David
Kumar

1
これは私にとってはうまくいきました。ViewGroup.LayoutParams.WRAP_CONTENT身長に使用しました。ありがとう。
ボーッ

1
これはクリーンで
ハッキングされていません

7
これは私の場合には機能しません。すべての隅からいくつかのパディングが表示されます。何か助け?
Abdul Waheed 2017年

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

    setStyle(DialogFragment.STYLE_NORMAL,
             android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}

7
私にとってうまくいくように思えた唯一の解決策。他の人は時々働いていました、時々働いていませんでした。私もこれに例外を見つけられないことを願っています:)
azertiti

12
これは私にとっても機能します。背景を透明にしたい場合は、「 '' android.R.style.Theme_Translucent_NoTitleBar ''」を使用する必要があります
acntwww

2
キーはSTYLE_NORMALを渡します。これにより、ダイアログは他のアクティビティと同じように画面いっぱいに表示されます。任意のテーマを使用できます。マテリアルデザインの場合、マテリアルテーマを派生させることができます(例:システムの装飾を維持しながらアクションバーを削除するTheme.AppCompat.NoActionBar)。
rpattabi

2
ははは、立ち上げた時、黒い画面が出てフリーズしていたなぁと思いました。次に、テーマをTheme_Light_NoTitleBar_Fullscreenに変更しました。おかげで、ダイアログは画面全体(ステータスバーを含む)を占めます。
CoolMind 2016

1
Theme_DeviceDefault_Light_NoActionBar_Fullscreen fow dialog with white background。
Hitesh Sahu

45

このリンクによると、DialogFragmentフルスクリーンは側面にパディングを表示し、これはチャームのように機能します。

@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {

    // the content
    final RelativeLayout root = new RelativeLayout(getActivity());
    root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    // creating the fullscreen dialog
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(root);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    return dialog;
}

4
2018年でも素晴らしい作品です!(他に何もしなかった)ありがとう。
AutonomousApps

2
これは、2018年のAndroid Studio 3.1以降でも完璧な回答であり、他の回答よりも優れています。他の答えはなどcardview、スピンナー、のようなアンドロイドのUI破っただろう
タウフィックヌールRahmandaを

1
2020年も魅力的に活躍!
Yue Yin

機能しますが、XMLレイアウトでマージンを定義したい場合は、ビューを別のレイアウトでラップする必要があります。それ以外の場合、マージンは無視されます。
Felipe Ribeiro R. Magalhaes

29

スタイルのみを使用して全画面のDialogFragmentを作成する

最初の解決策

1.に追加style.xml

    <style name="FullScreenDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:padding">0dp</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

2. DialogFragmentに追加します。

@Override
public int getTheme() {
    return R.style.FullScreenDialog;
}

代替ソリューション

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme)
}

どこAppThemeあなたはスタイルで定義されたテーマがあります。


これはbradley4の答えよりもエレガントな方法です。
MeLine

完璧な1行ソリューション
me_ 2018

どちらのソリューションも機能しましたが、最初のソリューションはクリップボードのポップアップでバグを引き起こしました。代替案は正常に機能する
Janusz Hain

18

私の場合、私は次のアプローチを使用しました:

    @Override
    public void onStart() {
        super.onStart();
        getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

さらに、LinearLayoutを使用して、すべてのスペースをコンテンツで埋めます。

ただし、一部のLollipop +デバイス(Nexus 9など)では、ダイアログの左端と右端と画面の端との間に小さなギャップまだありました。

それは明白ではありませんでしたが、最後に、すべてのデバイスとプラットフォーム全体で全幅にするには、ウィンドウの背景を次のようにstyles.xml内で指定する必要があることに気付きました

<style name="Dialog.NoTitle" parent="Theme.AppCompat.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="android:padding">0dp</item>
    <item name="android:windowBackground">@color/window_bg</item>
</style>

そしてもちろん、このスタイルは、次のようなダイアログを作成するときに使用する必要があります。

    public static DialogFragment createNoTitleDlg() {
        DialogFragment frag = new Some_Dialog_Frag();
        frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle);
        return frag;
}

これが答えです。よく働く。
VonSchnauzer 2016年

2
私はこのスレッドでほとんどの答えを試しましたが、一部は機能しましたが、アプリの互換テーマのスタイルをすべて失いました。親テーマがAppCompatだったので、これが機能することを望みました。それはほとんど働いていました。私にとっては、2つのスタイルを追加する必要がありました。 <item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item> ソース:TechRepublic
Breeno

15

全画面のdialogFragmentを使用するときに以前に問題に遭遇しました:全画面を設定している間は常にパディングがあります。dialogFragmentのonActivityCreated()メソッドでこのコードを試してください。

public void onActivityCreated(Bundle savedInstanceState)
{   
    super.onActivityCreated(savedInstanceState);
    Window window = getDialog().getWindow();
    LayoutParams attributes = window.getAttributes();
    //must setBackgroundDrawable(TRANSPARENT) in onActivityCreated()
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    if (needFullScreen)
    {
        window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

それは機能し、他のソリューションはボタンのテーマとフラグメントの他の要素を変更します。
Yhondri

11

Android APIが更新されている限り、全画面ダイアログを表示するための推奨方法は次のとおりです。

FragmentTransaction transaction = this.mFragmentManager.beginTransaction();
// For a little polish, specify a transition animation
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
transaction.add(android.R.id.content, this.mFragmentToShow).commit();

それ以外の場合、フルスクリーンで表示したくない場合は、次のようにできます。

this.mFragmentToShow.show(this.mFragmentManager, LOGTAG);

それが役に立てば幸い。

編集

私が与えた解決策はうまくいきますが、時には面倒かもしれない弱点を持っていることに注意してください。DialogFragmentをandroid.R.id.contentコンテナーに追加するDialogFragment#setCancelable()と、機能を正しく処理できなくなり、DialogFragment自体をバックスタックに追加するときに予期しない動作が発生する可能性があります。

したがって、次のようにonCreateメソッドでDialogFragmentのスタイルを簡単に変更することをお勧めします。

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Translucent_NoTitleBar);
}

それが役に立てば幸い。


1
同意する。Androidデベロッパーガイドの
詳しい

10

onCreateでsetStyle()を使用して、タイトルのないonCreateDialog makeダイアログをオーバーライドしてみてください

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme);        
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);        
    return dialog;
}

またはonCreate()とsetStyleのコードをオーバーライドするだけです。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme);        
}

8

実際、レイアウトの定義方法によって異なります。ただし、ダイアログが必要なサイズを確保するための最良の解決策は、ダイアログが表示されたら(作成時ではなく)、LayoutParamを提供することです。DialogFragmentでは、ダイアログはonStartメソッドに表示されるため、全幅を取得する有効なメソッドは次のとおりです。

@Override public void onStart() {
    super.onStart();
    Dialog d = getDialog();
    if (d!=null){
        d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }
}

NO_TITLEスタイルのようなテーマまたはスタイルも提供するには、最適な場所はonCreateメソッドです。

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);
}

6

注:ここでも正しい答えを見つけることができます。しかし、混乱を明確にしたいと思います。

以下のコードを使用 android.app.DialogFragment

@Override
public void onStart()
{
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}

以下のコードを使用 android.support.v4.app.DialogFragment

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}

6

そしてkotlinバージョン!

override fun onStart() {
    super.onStart()
    dialog?.let {
        val width = ViewGroup.LayoutParams.MATCH_PARENT
        val height = ViewGroup.LayoutParams.MATCH_PARENT
        it.window?.setLayout(width, height)
    }
}

1
それは実際に動作します!また、コンテンツの変形を回避するために、開発者はダイアログのコンテンツを透明なFrameLayoutでラップする必要があります。
Georgiy Chebotarev

4

これは私がこの問題を理解した方法です:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);    
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);   

    return dialog;
}

@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null) {
            dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    }
}

3

あなたのstyle.xmlで以下のテーマを作成してください:

<style name="DialogTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   <item name="android:paddingRight">0dp</item>
   <item name="android:paddingLeft">0dp</item>
   <item name="android:layout_width">match_parent</item>
   <item name="android:windowNoTitle">true</item>
</style>

次に、DialogFragmentでスタイルを設定します

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogTheme);
}

2

Chirag Nagariyaは、「_ Fullscreen」オプションを除いて正しいです。Dialogスタイルから派生していない基本スタイルを使用して解決できます。'android.R.style.Theme_Black_NoTitleBar'も使用できます。


1

他の誰かがこれに遭遇した場合、私はこれと同様の経験をしましたが、問題はonCreateViewからインフレートされたビューを返すのを忘れていたことであることがわかりました(代わりにデフォルトのsuper.onCreateViewを返します)。私は単に正しいインフレートされたビューを返すだけで問題は解決しました。


1
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = new Dialog(getActivity(), android.R.style.Theme_Holo_Light);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    return dialog;
}

このソリューションは、ダイアログに全画面テーマを適用します。これは、onCreateのChiragのsetStyleに似ています。欠点は、savedInstanceStateが使用されないことです。


1

複数の用途に共通のフラグメントダイアログにこれを試してください。これが賭けに役立つことを願っています

public class DialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_visit_history_main, container, false);

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        initializeUI(rootView);
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();
        Dialog dialog = getDialog();
        if (dialog != null) {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }
    }
    private void initializeUI(View rootView) {
    //getChildFragmentManager().beginTransaction().replace(R.id.fv_container,FragmentVisitHistory.getInstance(), AppConstant.FRAGMENT_VISIT_HISTORY).commit();
    }
}

この質問を参照してください- stackoverflow.com/questions/45494644/...
アマン・バーマ

1

これはフラグメント化するために設定する必要があるものです:

/* theme is optional, I am using leanback... */
setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);

あなたの場合:

DialogFragment newFragment = new DetailsDialogFragment();
newFragment.setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);
newFragment.show(ft, "dialog");

なぜ?DialogFragmentは(明示的に指示されていない場合)、カスタムレイアウトをラップする内部スタイルを使用します(フルスクリーンなしなど)。

そしてレイアウト?ハッキーな方法は必要ありません、これはうまくいきます:

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

楽しい


1

私はこの質問に答えるのが非常に遅いですが、私はこの答えを共有したいので、将来誰でもこれを使うことができます。

私は自分のプロジェクトでこのコードを使用しましたが、それはより低いバージョンとより高いバージョンで機能します。

このテーマをonCreateDialog()内で次のように使用するだけです:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_pump_details, null);

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
    return builder.create();
}

android.R.style.Theme_Black_NoTitleBar_Fullscreen-これは、このテーマのソースコードです。このテーマだけで、DialogFragmentをフルスクリーンで表示できます。

<!-- Variant of {@link #Theme_Black} that has no title bar and
     no status bar.  This theme
     sets {@link android.R.attr#windowFullscreen} to true.  -->
<style name="Theme.Black.NoTitleBar.Fullscreen">
    <item name="windowFullscreen">true</item>
    <item name="windowContentOverlay">@null</item>
</style>

問題が発生した場合はお知らせください。これがお役に立てば幸いです。ありがとう:)


ダイアログはフルスクリーンになりますが、ボタンを除いてすべてが黒くなりました。何か案が ??
Sagar Nayak、

1

次の方法は、相対レイアウトで作業している場合でも機能します。次の手順に従ってください。

  1. テーマエディターに移動します([ツール]-> [Android]-> [テーマエディター]で利用可能)
  2. [すべてのテーマを表示]を選択します。AppCompat.Dialogで 1つ選択します
  3. 特定の色の背景または透明な背景にしたい場合は、オプションandroid window backgroundを選択します。
  4. 色を選択して[OK]をクリックします。新しいテーマの名前を選択します。
  5. styles.xmlに移動し、追加したテーマの下に次の2つの属性を追加します。

    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

ダイアログのテーマ設定は次のとおりです:

<style name="DialogTheme" parent="Theme.AppCompat.Dialog" >
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

テーマの親がTheme.AppCompat.Dialogであることを確認する 別の方法は、styles.xmlで新しいスタイルを作成し、上記のコードに従って変更することです。

  1. Dialog Fragmentクラスに移動し、onCreate()メソッドで、Dialogのスタイルを次のように設定します。

    @Override public void onCreate(@Nullable Bundle savedInstanceState){super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL、R.style.DialogTheme); }


1

以下の行を全画面ダイアログのスタイルで追加します。

<item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>

または:fun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setStyle(DialogFragment.STYLE_NORMAL、R.style.BottomSheetDialogThemeNoFloating)<style name = "BottomSheetDialogThemeNoFloating" parent = "Theme.Design.Light.BottomSheetDialog"> <をオーバーライドしますitem name = "android:windowIsFloating"> false </ item> </ style>
フィリプコウィッツ

0

window.setLayout 古いデバイスには十分ではありません。

これが私がすることです:

try {
    ViewGroup parent = (ViewGroup) view;
    do {
        parent = (ViewGroup) parent.getParent();
        if (parent == null)
            break;

        parent.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.requestLayout();
    } while (true);
} catch (Exception e){}

0
This below answer works for me in fragment dialog.  


  Dialog dialog = getDialog();
        if (dialog != null)
        {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }

0

新しいを使用した解決策は、minHeightとminWidthを固定してをConstraintLayoutラップすることです。ラッピングがないと、ConstraintLayoutはダイアログの適切なサイズを取得できません。ConstraintLayoutLinearLayout

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

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background_color"
        android:orientation="vertical">
        <!-- some constrained views -->
    </androidx.constraintlayout.widget.ConstraintLayout>

</LinearLayout>

0

コトリンで働いて、

 override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

}

0

次の解決策は私のために働きました他の解決策は私に側面にいくつかのスペースを与えました、すなわちフルスクリーンではありません

onStartおよびonCreateメソッドを変更する必要があります

@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}


 public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    final Dialog dialog = new Dialog(requireContext());
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
 }


   
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.