Android의 전체 화면 대화 상자


165

거의 전체 화면 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");

조각의 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에서 제안한 것처럼 코드에서 창 속성을 설정하려고했습니다 . 그러나 이것은 도움이되지 않았습니다.

나는 안드로이드가 Dialogs를 어떻게 다루는 지에 대해 오해하고있을 것입니다. 이런 식으로 어떻게 할 수 있습니까? 목표를 달성 할 수있는 다른 방법이 있습니까?


안드로이드 장치 :
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);
}

불행히도, 이것은 내가 원하는 것이 아닙니다. 대화 상자 주변에 작은 "패딩"이 있어야 배경을 표시 할 수 있습니다.

그것을 달성하는 방법에 대한 아이디어가 있습니까?


2
잘 읽어보십시오 : techrepublic.com/article/…
kouretinho

당신은 내 시간, tysm 저장
Arul 마니

답변:


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

1
모든 것을 테스트했지만 DialogFragment에서 작동하는 유일한 것은 전체 레이아웃을 LinearLayout으로 래핑하는 것입니다. 그런 식으로 나는이에 폭과 내 (현재 포장) 원래의 레이아웃 ... 낭비 시간의 높이를 설정할 수 있습니다
까지

6
minWidth와 minHeight를 큰 값으로 설정하는 것이 중요한 부분 인 것 같습니다. 그러나 이것은 깨끗한 솔루션 대신 해킹입니다. 아래 @David가 제공 한 답변은 그가 제공하는 링크에서 더 자세히 설명되어 있습니다.
Garlef Wegart

@ tir38 onCreateDialog ()가 이미 슈퍼 클래스에 구현되어 있기 때문에 이것이 사실이라고 생각하지 않습니다.
starkej2

이것이 정답입니다. 정교하고 명확한
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);
    }
}

이 게시물에 대단히 감사드립니다 : 안드로이드의 신비-전체 화면-대화-조각


6
정확히 이것은 작동하지만 Videoview로 시도했지만 작동하지 않습니다. 상태 표시 줄이 여전히 표시됩니다. 그래서 이것은 코드 아래에서 나를 고쳤습니다 : dialog.getWindow (). setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
WhiteHorse

1
마지막으로 @David 제안을 위해 고맙습니다
Ashu Kumar

1
이것은 나를 위해 잘 작동했습니다. 나는 ViewGroup.LayoutParams.WRAP_CONTENT높이에 사용 했습니다. 감사.
dazed

1
이것은 깨끗하고
해킹

7
이것은 내 경우에는 효과가 없습니다. 그것은 모든 구석에서 약간의 패딩을 보여줍니다. 어떤 도움?
Abdul Waheed

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

1
Theme_DeviceDefault_Light_NoActionBar_ 흰색 배경의 전체 화면 흐름 대화 상자.
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 파산
타우 픽를 Nur Rahmanda을

1
2020 년에 매력적인 작품!
Yue Yin

작동하지만 XML 레이아웃에서 여백을 정의하려면 뷰를 다른 레이아웃으로 랩핑해야합니다. 그렇지 않으면 여백이 무시됩니다.
Felipe Ribeiro R. Magalhaes

30

스타일 만 사용하여 전체 화면 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

완벽한 한 줄 솔루션
me_

두 솔루션 모두 효과가 있었지만 첫 번째 솔루션은 클립 보드 팝업에 버그가 발생했습니다. 대체 작품 잘
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

2
이 스레드에서 대부분의 답변을 시도했지만 일부는 효과가 있었지만 모든 앱 compat 테마 스타일을 잃었습니다. 부모 테마가 AppCompat 인 것처럼 작동하기를 바랍니다. 그것은 거의 일했다. 나에게 2 가지 스타일을 추가해야했다. <item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item> 출처 : TechRepublic
Breeno

15

전체 화면 대화 상자를 사용할 때 문제가 발생했습니다 .Fragment : 전체 화면을 설정하는 동안 항상 패딩이 있습니다. 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);

도움이 되길 바랍니다.

편집하다

내가 준 솔루션은 효과가 있지만 때로는 문제가 될 수있는 약점을 가지고 있습니다. android.R.id.content컨테이너에 DialogFragment를 추가하면 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 개발자 안내서의 전체 설명입니다. link
user2274431

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

실제로 레이아웃 정의 방법에 따라 달라질 수 있습니다. 그러나 대화 상자가 필요한 크기를 갖도록하려면 가장 좋은 해결책은 대화 상자가 표시되면 (생성되지 않은 경우) LayoutParams를 제공하는 것입니다. 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);
}

7

참고 : 여기에서도 정답을 찾을 수 있습니다. 그러나 나는 혼란을 분명히하고 싶다.

아래 코드를 사용하십시오. 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

'_Fullscreen'추가를 제외하고 Chirag Nagariya가 옳습니다. 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가 있는 것을 선택하십시오.
  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>

테마에 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>

또는 : 재정의 재미 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"> 거짓 </ item> </ style>
Filipkowicz

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

새로운 기능을 사용하는 솔루션 ConstraintLayoutConstraintLayoutin LinearLayout을 minHeight 및 minWidth로 고정 하여 감싸는 것 입니다 . 줄 바꿈이 없으면 ConstraintLayout이 대화 상자에 적합한 크기를 얻지 못합니다.

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

Kotlin에서 저를 위해 일했습니다.

 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.