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);
}
로 바꿔보세요.LinearLayout
에 RelativeLayout
나는 테스트할 때 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'도 사용할 수 있습니다.
다음 방법은 상대 레이아웃에서 작업 중인 경우에도 작동합니다.다음 단계를 수행합니다.
- 테마 편집기로 이동 (도구 -> Android -> 테마 편집기에서 사용 가능)
- 모든 테마 표시를 선택합니다.AppCompat이 있는 것을 선택합니다.대화상자
- 특정 색상 배경 또는 투명 배경으로 하려면 Android 창 배경 옵션을 선택합니다.
- 색상을 선택하고 확인을 누릅니다.새 테마의 이름을 선택합니다.
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에서 새 스타일을 만들고 위의 코드에 따라 변경하는 것입니다.
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
순식간에LinearLayout
minHight 및 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
'programing' 카테고리의 다른 글
standard_init_linux.go:190: exec 사용자 프로세스로 인해 "해당 파일 또는 디렉터리가 없습니다" - 도커 (0) | 2023.08.13 |
---|---|
git 설명이 실패하고 "failure:이름을 찾을 수 없고, 어떤 것도 설명할 수 없습니다." (0) | 2023.08.13 |
동일한 로그 파일에 추가되는 표준 및 오류 출력의 리디렉션 (0) | 2023.08.13 |
파워셸에 디렉터리를 재귀적으로 나열 (0) | 2023.08.13 |
스크롤바가 있는 경우에도 div를 항상 페이지 내용의 맨 아래에 유지 (0) | 2023.08.13 |