programing

Android의 전체 화면 대화 상자 조각

newsource 2023. 8. 13. 09:46

Android의 전체 화면 대화 상자 조각

DialogFragment를 거의 전체 화면으로 표시하려고 합니다.하지만 저는 어떻게든 그렇게 할 수 없습니다.

내가 보여주는 단편은 안드로이드 개발자 설명서에서 직접 나온 것입니다.

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");

fragment의 RelativeLayout을 fill_parent와 일부 minWidth 및 minHight로 설정하려고 순진하게 시도한 것으로 알고 있습니다.

<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가 화면의 대부분을 차지할 것으로 예상합니다.하지만 저는 가로로 일정한 너비가 될 때까지 수직으로 크기를 조정하는 것처럼 보입니다.

는 또한 여기에서 제안한 대로 코드에서 Window Attributes를 설정하려고 했습니다: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec .하지만 이것도 도움이 되지 않았습니다.

안드로이드가 대화상자를 처리하는 방식에 대해 제가 처음이라 오해하고 있는 것 같습니다.제가 어떻게 이런 걸 할 수 있을까요?제 목표에 도달할 수 있는 다른 방법이 있습니까?


Android »:
Asus EeePad 압변기
안드로이드 3.0.1


업데이트: 이제 조각에 다음 코드가 포함된 전체 화면으로 전환할 수 있습니다.

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

불행하게도, 이것은 제가 원하는 것이 아닙니다.저는 배경을 보여주기 위해 대화 상자 주위에 작은 "패딩"이 꼭 필요합니다.

그것을 어떻게 달성할 수 있을까요?

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);
    }
}

그리고 이 게시물에 감사드립니다.안드로이드의 신비-전체 화면-대화 상자-조각

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

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

로 바꿔보세요.LinearLayoutRelativeLayout나는 테스트할 때 3.0 허니콤 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>

스타일만 사용하여 전체 화면 대화 상자 조각 만들기

제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>
        <item name="android:windowCloseOnTouchOutside">false</item>
    </style>

DialogFragment에 추가:

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

대체 해결책

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

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

링크에 따르면 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;
}

저의 경우 다음과 같은 접근 방식을 사용했습니다.

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

선형 레이아웃을 추가하여 모든 공간을 콘텐츠로 채웁니다.

그러나 일부 Rollipop+ 장치(예: 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;
}

이전에 전체 화면 대화 상자를 사용할 때 fragment: 전체 화면을 설정하는 동안 항상 패딩이 있습니다.Fragment's 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);
    }
}

그리고 코틀린 버전!

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

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);
}

도움이 되길 바랍니다.

Create에서 setStyle()을 사용하여 CreateDialog에서 제목 없이 대화 상자 만들기를 재정의합니다.

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

또는 Create()에서 재정의하고 Style 동료에게 코드를 설정합니다.

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

레이아웃이 정의되는 방식에 따라 달라질 수 있습니다.그러나 대화 상자가 필요한 크기를 얻으려면 대화 상자가 표시된 후(작성 시가 아닌) 레이아웃 매개 변수를 제공하는 것이 가장 좋습니다.DialogFragment(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);
}

참고: 여기서는 누구라도 정답을 찾을 수 있습니다.하지만 저는 혼란을 명확히 하고 싶습니다.

에 아래 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);
}

이를 위한 가장 쉬운 방법은 다음과 같습니다.

styles.xml에 다음 테마를 추가합니다.

<style name="DialogTheme" parent="AppTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">false</item>
    <item name="android:windowIsFloating">false</item>
</style>

클래스에서 DialogFragment를 확장하는 경우 재정의합니다.

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

이것은 Android OS 11(R)에서도 작동합니다.

https://anubhav-arora.medium.com/android-full-screen-dialogfragment-1410dbd96d37

이 문제를 파악한 방법은 다음과 같습니다.

@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));
    }
}

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);
}

Chirag Nagariya는 '_Fullscreen' 추가를 제외하면 맞습니다.대화 상자 스타일에서 파생되지 않은 기본 스타일을 사용하여 해결할 수 있습니다.'1987년'R.풍의Theme_Black_NoTitleBar'도 사용할 수 있습니다.

다음 방법은 상대 레이아웃에서 작업 중인 경우에도 작동합니다.다음 단계를 수행합니다.

  1. 테마 편집기로 이동 (도구 -> Android -> 테마 편집기에서 사용 가능)
  2. 모든 테마 표시를 선택합니다.AppCompat이 있는 것을 선택합니다.대화상자
  3. 특정 색상 배경 또는 투명 배경으로 하려면 Android 창 배경 옵션을 선택합니다.
  4. 색상을 선택하고 확인을 누릅니다.새 테마의 이름을 선택합니다.
  5. styles.xml로 이동한 다음 방금 추가한 테마 아래에 다음 두 가지 특성을 추가합니다.

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

테마에 부모가 테마로 있는지 확인합니다.AppCompat.대화상자 다른 방법은 styles.xml에서 새 스타일을 만들고 위의 코드에 따라 변경하는 것입니다.

  1. Dialog Fragment 클래스로 이동하여 onCreate() 메서드에서 Dialog의 스타일을 다음과 같이 설정합니다.

    @Create(@Nullable Bundle savedInstanceState) {super.onCreate(저장된 InstanceState)에서 public void를 재정의합니다. setStyle(DialogFragment).STYLE_NORMAL, R.style.대화상자테마); }

다른 사람이 이 문제를 발견할 경우, 저도 비슷한 경험을 했지만 문제는 CreateView에서 부풀린 보기를 반환하는 것을 잊어버린 것으로 나타났습니다(CreateView에서 기본 super.를 반환하는 대신).저는 단지 정확하게 부풀린 보기를 반환했고 그것이 문제를 해결했습니다.

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

이 솔루션은 Create의 Chirag의 setStyle과 유사한 전체 화면 테마를 대화 상자에 적용합니다.단점은 저장된 인스턴스 상태가 사용되지 않는다는 것입니다.

여러 용도의 일반적인 조각 대화 상자에 대해 이 작업을 수행합니다.이것이 당신이 더 나은 사람이 되기를 바랍니다.

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();
    }
}

fragment로 설정해야 하는 것은 다음과 같습니다.

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

즐거운 시간 되세요.

저는 이 질문에 답하기에 매우 늦었지만, 앞으로 누구나 이것을 사용할 수 있도록 이 답을 공유하고 싶습니다.

저는 이 코드를 프로젝트에서 사용해 왔습니다. 이 코드는 상위 버전뿐만 아니라 하위 버전에서도 작동합니다.

다음과 같이 CreateDialog()의 내부에서 이 테마를 사용합니다.

@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();
}

안드로이드의R.풍의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>

문제가 발생하는 사람이 있으면 알려주시기 바랍니다.이것이 도움이 되기를 바랍니다.감사합니다 :)

전체 화면 대화 상자의 스타일로 아래 줄을 추가합니다.

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

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){}
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);
        }

새운기사솔루션을 ConstraintLayout포장하고 있습니다.ConstraintLayout순식간에LinearLayoutminHight 및 minWidth가 고정되어 있습니다.래핑이 없으면 제약 조건 레이아웃이 대화 상자에 적합한 크기를 얻지 못합니다.

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

코틀린에서 일했고,

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

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

}

다음 솔루션은 저에게 효과가 있었습니다. 다른 솔루션은 측면에 약간의 공간을 주었습니다. 즉, 전체 화면이 아닙니다.

시작 및 생성 방법을 변경해야 합니다.

@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));
 }


   

더 이상 복잡한 코드가 필요한 스타일은 없습니다.상태 표시줄을 사용합니다.

public static void ShowFullScreenDialog(Context context, View contentView, string header)
        {

            using (Android.Support.V7.App.AlertDialog.Builder builder = new Android.Support.V7.App.AlertDialog.Builder(context, Android.Resource.Style.ThemeBlackNoTitleBarFullScreen))
            {
                var view = UIHelper.InflaterView(context, Resource.Layout.dialog_full_screen);
                builder.SetView(view);
                Dialog dialog = builder.Create();
                dialog.Window.SetBackgroundDrawableResource(ThemeHelper.GetMainActivityThemeDrawable());
                dialog.Window.SetLayout(context.Resources.DisplayMetrics.WidthPixels, context.Resources.DisplayMetrics.HeightPixels);
                dialog.Window.DecorView.SystemUiVisibility = StatusBarVisibility.Visible;
                
                //fullLinear
                var headtxt = view.FindViewById<TextView>(Resource.Id.headertxt);
                headtxt.SetTextColor(Color.White);
                headtxt.Text = header;
                var fullLinear = view.FindViewById<LinearLayout>(Resource.Id.fullLinear);
                var closeBttn = view.FindViewById<ImageButton>(Resource.Id.closeBttn);
                closeBttn.ImageTintList = ColorHelper.ConvertColorToStateList(Color.White);
                closeBttn.Click += delegate
                {
                    dialog.Hide();
                };
                if (contentView.Parent != null)
                    ((ViewGroup)contentView.Parent).RemoveView(contentView); // <- fix
                fullLinear.AddView(contentView);
                
                dialog.Show();
            }
            
        }

중요한

dialog.Window.SetLayout(context.Resources.DisplayMetrics.WidthPixels, context.Resources.DisplayMetrics.HeightPixels);
class NameDialog : DialogFragment(){
lateinit  var mDataBinding:NameYourLayoutBinding

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
         super.onCreateView(inflater, container, savedInstanceState)
        mDataBinding=DataBindingUtil.inflate(
            LayoutInflater.from(getContext()),
            R.layout.YOUR.LAYOUT.NAME,
            null,
            false
        )
        dialog?.let {
            it.window?.requestFeature(Window.FEATURE_NO_TITLE)
            it.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        }
        return mDataBinding.root
    }



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

    }

}

언급URL : https://stackoverflow.com/questions/7189948/full-screen-dialogfragment-in-android