programing

경고 대화 상자가 화면 크기의 90%를 채우도록 만드는 방법은 무엇입니까?

lastmoon 2023. 8. 10. 19:07
반응형

경고 대화 상자가 화면 크기의 90%를 채우도록 만드는 방법은 무엇입니까?

사용자 상자를 가 없지만, 지정 경고 대화 상자를 .android:layout_width/height="fill_parent"xml 만 합니다.

제가 원하는 것은 아마도 20픽셀의 패딩을 제외한 전체 화면을 채우는 대화상자입니다.그러면 대화 상자의 일부인 이미지가 fill_parent를 가진 전체 대화 상자 크기로 자동으로 확장됩니다.

이 토론 그룹 게시물에서 안드로이드 플랫폼 개발자인 Dianne Hackborn에 따르면 Dialogs는 윈도우의 최상위 레이아웃 폭과 높이를 다음과 같이 설정했습니다.WRAP_CONTENT 해당 를 Dialog(으)로 합니다.MATCH_PARENT.

데모 코드:

    AlertDialog.Builder adb = new AlertDialog.Builder(this);
    Dialog d = adb.setView(new View(this)).create();
    // (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)

    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    lp.copyFrom(d.getWindow().getAttributes());
    lp.width = WindowManager.LayoutParams.MATCH_PARENT;
    lp.height = WindowManager.LayoutParams.MATCH_PARENT;
    d.show();
    d.getWindow().setAttributes(lp);

특성은 Dialog(대화 상자)가 표시된 후에 설정됩니다.시스템은 언제 설정되는지에 대해 까다롭습니다. (레이아웃 엔진은 대화상자가 처음 나타날 때 또는 어떤 것이 표시될 때 설정해야 한다고 생각합니다.)

테마를 확장하여 이 작업을 수행하는 것이 좋습니다.그러면 setAttributes를 호출할 때 추측 게임을 할 필요가 없습니다.대화 상자에 적절한 명암 테마 또는 허니콤 홀로 테마를 자동으로 적용하는 것이 더 많은 작업이기는 하지만,http://developer.android.com/guide/topics/ui/themes.html#SelectATheme )에 따라 수행할 수 있습니다.

사용자 지정 대화 상자 레이아웃을 다음으로 래핑해 보십시오.RelativeLayoutLinearLayout그것은 저에게 효과가 있었습니다.

더 간단한 방법은 다음과 같습니다.

int width = (int)(getResources().getDisplayMetrics().widthPixels*0.90);
int height = (int)(getResources().getDisplayMetrics().heightPixels*0.90);

alertDialog.getWindow().setLayout(width, height);

다른 사람들이 제안한 것처럼 대화창에 FILL_PARENT를 지정하는 것은 (Android 4.0.4에서는) 전체 화면을 채우기 위해 검은색 대화창 배경을 늘렸을 뿐이었기 때문에 저에게는 효과가 없었습니다.

문제가 없는 것은 최소 표시 값을 사용하지만 대화 상자가 화면의 90%를 차지하도록 코드 내에서 지정하는 것입니다.

그래서:

Activity activity = ...;
AlertDialog dialog = ...;

// retrieve display dimensions
Rect displayRectangle = new Rect();
Window window = activity.getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);

// inflate and adjust layout
LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.your_dialog_layout, null);
layout.setMinimumWidth((int)(displayRectangle.width() * 0.9f));
layout.setMinimumHeight((int)(displayRectangle.height() * 0.9f));

dialog.setView(layout);

일반적으로 대부분의 경우 폭만 조정하면 충분합니다.

android:minWidth그리고.android:minHeight사용자 정의 보기 xml에 있습니다.이로 인해 알림이 내용 크기만 줄이지 않을 수 있습니다.이와 같은 보기를 사용하면 다음 작업을 수행할 수 있습니다.

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:minWidth="300dp" 
  android:minHeight="400dp">
  <ImageView
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="@drawable/icon"/>
</LinearLayout>
dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

저는 다음과 같은 것들이 잘 작동했습니다.

    <style name="MyAlertDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
        <item name="windowFixedWidthMajor">90%</item>
        <item name="windowFixedWidthMinor">90%</item>
    </style>

(참고: 이전 답변에서 제안한 windowMinWidthMajor/minor는 효과가 없었습니다.내용에 따라 대화 상자의 크기가 계속 변경됨)

다음과 같은 경우:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyAlertDialogTheme);

여기에 있는 다른 모든 대답들은 일리가 있지만, 그것은 Fabian이 필요로 하는 것을 충족시키지 못했습니다.여기 제 해결책이 있습니다.완벽한 해결책은 아닐 수도 있지만 저에게는 효과가 있습니다.전체 화면에 표시되지만 위쪽, 아래쪽, 왼쪽 또는 오른쪽에 패딩을 지정할 수 있습니다.

먼저 res/values/styles.xml에 입력합니다.

<style name="CustomDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@color/Black0Percent</item>
    <item name="android:paddingTop">20dp</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowIsFloating">false</item>
</style>

보시다시피 안드로이드가 있습니다. 패딩탑= 20dp가 기본적으로 필요한 것입니다.Android:windowBackground = @color/Black0Percent는 내 color.xml에 선언된 색상 코드일 뿐입니다.

res/values/color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="Black0Percent">#00000000</color>
</resources>

이 색상 코드는 Dialog의 기본 창 배경을 0% 투명 색상으로 바꾸기 위한 더미 역할을 합니다.

다음으로 사용자 지정 대화 상자 레이아웃 res/layout/dialog.xml을 빌드합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialoglayout"
    android:layout_width="match_parent"
    android:background="@drawable/DesiredImageBackground"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edittext1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textSize="18dp" />

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Dummy Button"
        android:textSize="18dp" />

</LinearLayout>

마지막으로 dialog.xml을 사용하는 사용자 정의 보기를 설정하는 대화 상자가 있습니다.

Dialog customDialog;
LayoutInflater inflater = (LayoutInflater) getLayoutInflater();
View customView = inflater.inflate(R.layout.dialog, null);
// Build the dialog
customDialog = new Dialog(this, R.style.CustomDialog);
customDialog.setContentView(customView);
customDialog.show();

결론:CustomDialog라는 styles.xml에서 대화 상자의 테마를 재정의하려고 했습니다.대화 상자 창 레이아웃을 재정의하고 패딩을 설정하고 배경의 불투명도를 변경할 수 있습니다.완벽한 해결책은 아닐 수도 있지만 도움이 되길 바랍니다.:)

(JUST) 창 대화 상자 너비에 대한 백분율을 사용할 수 있습니다.

Holo Theme에서 이 예를 살펴봅니다.

<style name="Theme.Holo.Dialog.NoActionBar.MinWidth">
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
</style>

 <!-- The platform's desired minimum size for a dialog's width when it
     is along the major axis (that is the screen is landscape).  This may
     be either a fraction or a dimension. -->
<item type="dimen" name="dialog_min_width_major">65%</item>

이 테마를 확장하고 "Major" 및 "Minor" 값을 65% 대신 90%로 변경하기만 하면 됩니다.

안부 전해요.

실제 90% 계산된 솔루션:

@Override public void onStart() {
   Dialog dialog = getDialog();
   if (dialog != null) {
     dialog.getWindow()
        .setLayout((int) (getScreenWidth(getActivity()) * .9), ViewGroup.LayoutParams.MATCH_PARENT);
   }
}

getScreenWidth(Activity activity)는 다음과 같이 정의됩니다(Utils 클래스에 가장 적합함).

public static int getScreenWidth(Activity activity) {
   Point size = new Point();
   activity.getWindowManager().getDefaultDisplay().getSize(size);
   return size.x;
}

장치 너비 가져오기:

public static int getWidth(Context context) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    WindowManager windowmanager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
    return displayMetrics.widthPixels;
}

대화상자를 만드는 데 90%의 장치를 사용합니다.

Dialog filterDialog = new Dialog(context, R.style.searchsdk_FilterDialog);

filterDialog.setContentView(R.layout.searchsdk_filter_popup);
initFilterDialog(filterDialog);
filterDialog.setCancelable(true);
filterDialog.getWindow().setLayout(((getWidth(context) / 100) * 90), LinearLayout.LayoutParams.MATCH_PARENT);
filterDialog.getWindow().setGravity(Gravity.END);
filterDialog.show();

대화 상자를 표시하려면 먼저 대화 상자의 높이와 너비를 설정해야 합니다(dialog.show()).

다음과 같은 작업을 수행합니다.

dialog.getWindow().setLayout(width, height);

//then

dialog.show()

내가 생각할 수 있는 가장 간단한 방법은 -

대화 상자가 수직 선형 레이아웃으로 만들어진 경우 화면의 전체 높이를 차지하는 "높이 채우기" 더미 보기를 추가하기만 하면 됩니다.

예를 들어 -

<?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:weightSum="1">

    <EditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/editSearch" />

    <ListView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/listView"/>


   <!-- this is a dummy view that will make sure the dialog is highest -->
   <View
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_weight="1"/>

</LinearLayout>

에 하십시오.android:weightSum="1" 및 속및성의웃 android:layout_weight="1" 뷰의

대화 상자를 표시하려면 먼저 대화 상자의 높이와 너비를 설정해야 합니다(dialog.show()).

다음과 같은 작업을 수행합니다.

dialog.getWindow().setLayout(width, height);

//then

dialog.show()

이 코드를 얻으면서 몇 가지 변경을 가했습니다.

dialog.getWindow().setLayout((int)(MapGeaGtaxiActivity.this.getWindow().peekDecorView().getWidth()*0.9),(int) (MapGeaGtaxiActivity.this.getWindow().peekDecorView().getHeight()*0.9));

그러나 장치가 위치를 변경할 때 대화 상자 크기가 변경될 수 있습니다.아마도 메트릭이 변경될 때 스스로 처리해야 할 것입니다.PD: peekDecorView는 활동의 레이아웃이 적절하게 초기화되었음을 의미합니다. 그렇지 않으면 사용할 수 있습니다.

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int wwidth = metrics.widthPixels;

화면 크기를 확인하기 위해

대화 상자 개체를 초기화한 후 내용 보기를 설정합니다.이렇게 하고 즐기세요.

(내가 가로 90%, 세로 70%를 설정하는 경우, 가로 90%는 도구 모음 위에 있기 때문에)

DisplayMetrics displaymetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = (int) ((int)displaymetrics.widthPixels * 0.9);
int height = (int) ((int)displaymetrics.heightPixels * 0.7);
d.getWindow().setLayout(width,height);
d.show();
***In Kotlin You can Code like This : -*** 

fun customDialog(activity: Activity?, layout: Int): Dialog {
    val dialog = Dialog(activity!!)
    try {
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
        dialog.setCancelable(false)
        dialog.setContentView(layout)
        dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        dialog.window!!.setLayout(ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
        dialog.show()
    } catch (e: Exception) {

    }
    return dialog
}

Alert Dialog에 이 테마만 하면 됩니다.

<style name="DialogTheme" parent="Theme.MaterialComponents.Light.Dialog.MinWidth">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="android:windowMinWidthMajor">90%</item>
    <item name="android:windowMinWidthMinor">90%</item>
</style>

내 대답은 코마를 기반으로 하지만 시작 시 재정의할 필요는 없고 새 조각을 만들 때 거의 항상 기본적으로 재정의되는 CreateView에만 적용됩니다.

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

    Rect displayRectangle = new Rect();
    Window window = getDialog().getWindow();
    window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);

    v.setMinimumWidth((int)(displayRectangle.width() * 0.9f));
    v.setMinimumHeight((int)(displayRectangle.height() * 0.9f));

    return v;
}

Android 5.0.1에서 테스트했습니다.

위의 많은 답들은 좋지만 저에게 완전히 효과가 있는 답은 하나도 없습니다.그래서 저는 @nmr의 답을 조합해서 이것을 얻었습니다.

final Dialog d = new Dialog(getActivity());
        //  d.getWindow().setBackgroundDrawable(R.color.action_bar_bg);
        d.requestWindowFeature(Window.FEATURE_NO_TITLE);
        d.setContentView(R.layout.dialog_box_shipment_detail);

        WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE); // for activity use context instead of getActivity()
        Display display = wm.getDefaultDisplay(); // getting the screen size of device
        Point size = new Point();
        display.getSize(size);
        int width = size.x - 20;  // Set your heights
        int height = size.y - 80; // set your widths

        WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
        lp.copyFrom(d.getWindow().getAttributes());

        lp.width = width;
        lp.height = height;

        d.getWindow().setAttributes(lp);
        d.show();
    ...
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    Dialog d = builder.create(); //create Dialog
    d.show(); //first show

    DisplayMetrics metrics = new DisplayMetrics(); //get metrics of screen
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int height = (int) (metrics.heightPixels*0.9); //set height to 90% of total
    int width = (int) (metrics.widthPixels*0.9); //set width to 90% of total

    d.getWindow().setLayout(width, height); //set layout

다음은 사용자 지정 대화 상자 너비에 대한 변형입니다.

DisplayMetrics displaymetrics = new DisplayMetrics();
mActivity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = (int) (displaymetrics.widthPixels * (ThemeHelper.isPortrait(mContext) ? 0.95 : 0.65));

WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = width;
getWindow().setAttributes(params);

따라서 장치 방향에 따라 달라집니다.ThemeHelper.isPortrait(mContext)) 대화 상자의 너비는 95%(세로 모드) 또는 65%(가로 모드)입니다.작가가 부탁한 것은 조금 더 있지만 누군가에게 유용할 수도 있습니다.

Dialog에서 확장되는 클래스를 만들고 이 코드를 사용자에게 입력해야 합니다.onCreate(Bundle savedInstanceState)방법.

대화 상자의 높이에 대한 코드는 이와 유사해야 합니다.

public static WindowManager.LayoutParams setDialogLayoutParams(Activity activity, Dialog dialog)
    {
        try 
        {
            Display display = activity.getWindowManager().getDefaultDisplay();
            Point screenSize = new Point();
            display.getSize(screenSize);
            int width = screenSize.x;

            WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
            layoutParams.copyFrom(dialog.getWindow().getAttributes());
            layoutParams.width = (int) (width - (width * 0.07) ); 
            layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
            return layoutParams;
        } 
        catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }

사용자 지정 가능한 대화 상자를 표시하려면 CustomDialog와 같은 @style.xml 스타일을 사용해야 합니다.

<style name="CustomDialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@color/colorWhite</item>
    <item name="android:editTextColor">@color/colorBlack</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>

그리고 Activity.java에서 이 스타일을 이렇게 사용합니다.

Dialog dialog = new Dialog(Activity.this, R.style.CustomDialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_dialog);

그리고 custom_dialog.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:paddingLeft="10dp"
    android:paddingRight="10dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="20dp"
        android:id="@+id/tittle_text_view"
        android:textColor="@color/colorBlack"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="10dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp">

        <EditText
            android:id="@+id/edit_text_first"
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:hint="0"
            android:inputType="number" />

        <TextView
            android:id="@+id/text_view_first"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:gravity="center"/>

        <EditText
            android:id="@+id/edit_text_second"
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:hint="0"
            android:layout_marginLeft="5dp"
            android:inputType="number" />

        <TextView
            android:id="@+id/text_view_second"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:gravity="center"/>

    </LinearLayout>

</LinearLayout>

부분적으로 아난드의 대답에 근거합니다.이것은 나에게 도움이 됩니다.

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    val fragmentActivity = requireActivity()
    val v = View.inflate(context, R.layout.fragment_about_dialog, null)
    val dialog = Dialog(fragmentActivity)
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
    dialog.setContentView(v)

    val wm = fragmentActivity.getSystemService(Context.WINDOW_SERVICE) as WindowManager 

    val display = if (VERSION.SDK_INT >= VERSION_CODES.R) {
        fragmentActivity.display
    } else {
        wm.defaultDisplay // deprecated in API 30
    }

    val size = Point()
    display?.getSize(size)

    val width = size.x - 50
    val height = size.y - 50
    val lp = WindowManager.LayoutParams()
    lp.copyFrom(dialog.window?.attributes)
    lp.width = width
    lp.height = height
    dialog.show()
    dialog.window?.attributes = lp
    
    return dialog
}

대화상자 레이아웃에 사용된 제약 조건Layout:

<androidx.constraintlayout.widget.ConstraintLayout 
        android:id="@+id/dialogLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    ...
</androidx.constraintlayout.widget.ConstraintLayout>

결과:

enter image description here

이것은 화면 방향을 변경할 때 잘 작동합니다.

여기 저에게 효과가 있었던 짧은 답변이 있습니다(API 8 및 API 19에서 테스트됨).

Dialog mDialog;
View   mDialogView;
...
// Get height
int height = mDialog.getWindow()
.getWindowManager().getDefaultDisplay()
.getHeight();

// Set your desired padding (here 90%)
int padding = height - (int)(height*0.9f);

// Apply it to the Dialog
mDialogView.setPadding(
// padding left
0,
// padding top (90%)
padding, 
// padding right
0, 
// padding bottom (90%)
padding);

구속조건 레이아웃을 사용하는 경우 화면의 일부를 다음으로 채우도록 내부의 보기를 설정할 수 있습니다.

레이아웃_제약 조건width_percent="0.8"

예를 들어 대화 상자 안에 ScrollView(스크롤 보기)가 있고 화면 높이의 백분율로 설정하려는 경우입니다.이는 다음과 같습니다.

<ScrollView
            android:id="@+id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintHeight_percent="0.8">

누군가에게 도움이 되길 바랍니다!!

대화 상자 조각을 사용하는 경우 다시 시작 메서드에서 수행할 수 있습니다.안드로이드용 사마린 코드인데 너무 쉽게 이해할 수 있을 것 같습니다.

public override void OnResume() 
{
    base.OnResume();
    var metrics = Resources.DisplayMetrics;

    double width = metrics.WidthPixels * 0.9;
    double height = metrics.HeightPixels * 0.6;

    this.Dialog.Window.SetLayout((int)width, (int)height);
    this.Dialog.Window.SetGravity(Android.Views.GravityFlags.Center);
}

대화 상자를 활동으로 만듭니다.3단계

1단계: 이 중 하나를 styles.xml에 넣습니다.

스타일 1: 부모 테마를 앱의 나머지 부분에 사용하는 테마의 이름으로 변경할 수 있기 때문에 이 테마가 좋습니다.

<style name="DialogTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowMinWidthMajor">90%</item>
    <item name="android:windowMinWidthMinor">90%</item>
</style>

스타일 2:

<style name="DialogTheme" parent="Theme.AppCompat.Dialog">
    <item name="android:windowMinWidthMajor">90%</item>
    <item name="android:windowMinWidthMinor">90%</item>
</style>

2단계: AndroidManifest.xml에 저장합니다.

<activity
    android:name="com.example.YourApp.DialogActivity"
    android:theme="@style/DialogTheme" />

3단계: 기본 레이아웃 너비가 활동_dialog.xml에 fill_parent 또는 match_parent인지 확인합니다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    tools:context=".DialogActivity">

</androidx.constraintlayout.widget.ConstraintLayout>
    final AlertDialog alertDialog;

    LayoutInflater li = LayoutInflater.from(mActivity);
    final View promptsView = li.inflate(R.layout.layout_dialog_select_time, null);

    RecyclerView recyclerViewTime;
    RippleButton buttonDone;

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mActivity);
    alertDialogBuilder.setView(promptsView);

    // create alert dialog
    alertDialog = alertDialogBuilder.create();

    /**
     * setting up window design
     */
    alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);


    alertDialog.show();

    DisplayMetrics metrics = new DisplayMetrics(); //get metrics of screen
    mActivity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int height = (int) (metrics.heightPixels * 0.9); //set height to 90% of total
    int width = (int) (metrics.widthPixels * 0.9); //set width to 90% of total

    alertDialog.getWindow().setLayout(width, height); //set layout
    recyclerViewTime = promptsView.findViewById(R.id.recyclerViewTime);


    DialogSelectTimeAdapter dialogSelectTimeAdapter = new DialogSelectTimeAdapter(this);
    RecyclerView.LayoutManager linearLayoutManager = new LinearLayoutManager(this);
    recyclerViewTime.setLayoutManager(linearLayoutManager);
    recyclerViewTime.setAdapter(dialogSelectTimeAdapter);

    buttonDone = promptsView.findViewById(R.id.buttonDone);
    buttonDone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            alertDialog.dismiss();

        }
    });

매우 간단하고 사용하기 쉬운 해결 방법을 찾았습니다.

    fun showDialog(){
    val dialog = Dialog(this@DialogActivity)
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
    dialog.setCancelable(false)
    dialog.setContentView(R.layout.custom_dialog)
    val txtTitle = dialog.findViewById<TextView>(R.id.txtTitle)
    val btn  = dialog.findViewById<Button>(R.id.button)

    btn.setOnClickListener {
        Toast.makeText(this,"test",Toast.LENGTH_SHORT).show()
    }
    txtTitle.setText("ali")
    dialog.show()

    val window = dialog.window
    window?.setLayout(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT)
}

언급URL : https://stackoverflow.com/questions/2306503/how-to-make-an-alert-dialog-fill-90-of-screen-size

반응형