如何使警报对话框填充屏幕大小的90%?


303

我可以创建并显示自定义警报对话框,但即使如此 android:layout_width/height="fill_parent"在对话框xml中,它也只与内容一样大。

我想要的是一个对话框,它可以填充整个屏幕,但可能需要20像素的填充。然后,作为对话框一部分的图像将使用fill_parent自动拉伸为整个对话框大小。

Answers:


355

根据Android平台开发人员Dianne Hackborn在讨论组中的说法,Dialogs将其Window的顶层布局宽度和高度设置为WRAP_CONTENT。要使对话框更大,可以将这些参数设置为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);

请注意,在显示对话框之后设置属性。系统对设置它们的时间很挑剔。(我猜想布局引擎必须在第一次显示对话框时设置它们,或其他。)

最好通过扩展Theme.Dialog来做到这一点,然后您就不必再猜测何时调用setAttributes了。(尽管要让对话框自动采用适当的浅色或深色主题或Honeycomb Holo主题还需要做很多工作。可以根据http://developer.android.com/guide/topics/ui/themes来完成此操作。 html#SelectATheme


5
我不明白答案,还是对我不起作用。
大卫·莫拉莱斯

4
对话框的wrap_content宽度似乎并不正确。事情变得越来越狭窄和被切断。对话框似乎设置为某个最大预定宽度。
彼得·阿杰泰

21
我不知道如何回答这个问题?@nmr建议的代码是否使对话框占屏幕的90%?因为我看不到。对话框只是设置为fill_width,所以100%,而不是90%,对吗?
Ted

4
@ Ted,AlertDialog使用的主题有一个空白。因此结果不会到达屏幕的边缘,大约占了屏幕的90%。(这绝对不是90%,只是美学上接近90%)
nmr

8
只需调用d.getWindow()。getAttributes()。width = WindowManager.LayoutParams.FILL_PARENT; 在调用show()之前可以解决问题。另外,由于对话框的背景变得不透明,因此给定方法也存在一些问题。删除copyFrom(()后,问题便自动修复。–
Alexey

182

尝试将您的自定义对话框布局包装成RelativeLayout而不是LinearLayout。那对我有用。


2
对我来说也是如此。谁能解释原因!
罗齐纳

是RelativeLayout应该工作的方式,还是可能消失的快乐事故?
Yetti99 '18

9
这是2019年,现在仍然有效。干杯! 确实应该是公认的答案。
TaylanUB

@cvarsendan您能解释答案吗?那对我有用。谢谢!
哈科

天哪,我的RecyclerView永远不会显示全高,或者它的高度始终为0,然后在尝试了许多解决方案的一天之后,它可以完美显示。为什么是RelativeLayout但其他人呢?
leegor

85

像其他建议的那样,在对话框窗口上指定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);

通常,在大多数情况下,仅调整宽度就足够了。


在4.0及更高版本上,这似乎无法完全正常工作。它无法填充屏幕的90%。知道为什么吗?我正在4.0版的Motorola Xoom上执行此操作
Ryan Gray

@RyanGray它在更新了操作系统的Samsung Nexus S上为我工作。很遗憾,如果没有其他信息,我将无法为您提供帮助。
科马2012年

83

在您的自定义视图xml中设置android:minWidthandroid:minHeight。这些可以强制警报不仅仅包装内容的大小。使用这样的视图应该做到这一点:

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

3
是的,我可以将其设置为特定的大小,但是我希望它的大小为屏幕尺寸减去20像素的填充。或宽度=屏幕宽度的90%。
Fabian

4
I密度无关的像素始终按比例缩放,因此任何屏幕的分辨率均为320x480dp,因此在所有情况下300x460dp的视图都将成为20dp的填充。或者,您可以找到屏幕的大小,如下所示:Display display =((WindowManager)getSystemService(Context.WINDOW_SERVICE))。getDefaultDisplay(); int width = display.getWidth(); 并相应地设置maxWidth和maxHeight。
jqpubliq 2010年

5
从贬低的嗯,我了解dp的概念。但是,如果屏幕比例是16:9或4:3,该怎么办?dp会不均匀地拉伸吗?
Fabian

2
不,如果屏幕比例为2:3,则dp分辨率将仅为320x480,因此此方法将不起作用。
mhsmith 2011年

21
什么,为什么这个答案被否决了那么多次?这是一个糟糕的解决方案,因为它完全不考虑用户使用的设备大小。

70

更简单的方法是:

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

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

附注:getResources()在“活动”上下文中可用。
nat101

对于尝试onCreate在设备旋转后重新创建对话框的情况,此答案非常有用。在这种情况下,我们不能依靠布局中任何东西的宽度/高度,因为它还没有被创建。但是设备的实际宽度/高度仍然可用。
蒂姆·比格莱森

4
如果你想改变只有一个维度,传递ViewGroup.LayoutParams.WRAP_CONTENT作为参数之一
瓦迪姆·科托夫

53
dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

1
这对我有用,并且很容易转换成MonoDroid,它的工作原理是这样的(其中d是一个新的Dialog):d.Window.SetLayout(WindowManagerLayoutParams.FillParent,WindowManagerLayoutParams.FillParent);
theJerm

9
但是90%与100%不同。FILL_PARENT将指示填充整个宽度,即100%,而不是90%。对?
Ted

@Ted你是对的。您可以替换FILL_PARENT为计算为当前显示器宽度的90%的宽度。但是我喜欢答案,因为它比其他答案更容易。
HRJ 2013年

26

这里的所有其他答案都是有道理的,但是并不能满足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>

如您所见,我在那里有android:paddingTop = 20dp基本上就是您所需要的。该机器人:windowBackground = @彩/ Black0Percent是我color.xml宣布只是一个颜色代码

res / values / color.xml

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

该颜色代码仅用作虚拟对象,用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中覆盖对话框的主题。它覆盖了Dialog窗口的布局,使我有机会设置填充并更改背景的不透明度。它可能不是完美的解决方案,但希望对您有帮助。.:)


它现在适用于豆形软糖,但我现在无法测试其他豆子了
Nasz Njoka Sr.

似乎是最干净,最优雅的解决方案。适用于Kitkat 4.4和4.3。
大卫

我有一个自定义对话框,并且直到我看到这一切之前,NOTHING都没有起作用,自定义对话框(扩展了DialogFragment)上的魔力,所有魔力都随您而来:Dialog customDialog = new Dialog(context, STYLE);谢谢,真的,谢谢。
Sierisimo 2015年

高兴

这就像对话框窗口的魅力一样!(你也可以定义一个Black60Percent有原来的窗口灰色)不幸的副作用是,我所有的对话框中的观点继承我的对话框中设置的垫衬....
runholen

25

您可以将百分比用作(仅)窗口对话框的宽度。

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

您需要做的就是扩展此主题,并将“主要”和“次要”的值更改为90%,而不是65%。

问候。


1
要将其与对话框一起使用,只需在对话框构建器构造函数中传递您的自定义样式即可:)
sosite

22

以下对我来说很好:

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

3
到目前为止最好的答案。为我完美地工作!
Pawan

我想知道:如何通过代码获取以百分比设置的特殊尺寸的值?
android开发者

18

实际计算为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;
}

对于应具有类似于对话框功能的appcompatactivity而言,其工作方式就像魅力一样

我正在超出此范围的数组索引:(
aNdRO博士17年

@ Dr.aNdRO怎么样?哪条线?您确定这是这段代码而不是其他代码吗?
Mehmet K

.setLayout()我正在这行中,当我将其更改为WRAP CONTENT时,它可以正常工作
aNdRO博士17年


10

获取设备宽度:

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

8

好了,您必须先设置对话框的高度和宽度才能显示此内容(dialog.show())

因此,请执行以下操作:

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

//then

dialog.show()

不为我设置尺寸。API> = 21.
Odys

7

到目前为止,我能想到的最简单的方法是-

如果您的对话框是由垂直的LinearLayout制成的,则只需添加一个“高度填充”虚拟视图,该视图将占据屏幕的整个高度。

例如 -

<?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"LinearLayout属性中的和android:layout_weight="1"虚拟视图属性中的


真好!这样可以使我的webview在开始onPageFinished之后不会开始很短,然后扩展到全高。荣誉!
南希

6

好了,您必须先设置对话框的高度和宽度才能显示此内容(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;

为了得到屏幕尺寸


6

初始化对话框对象并设置内容视图之后。这样做并享受。

(如果我将宽度设置为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();

4

我的答案是基于koma的,但是它不需要覆盖onStart,而仅覆盖onCreateView,在创建新片段时,默认情况下几乎总是覆盖它。

@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上对其进行了测试。


3

这是我的自定义对话框宽度的变体:

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)方法中。

对于对话框的高度,代码应与此类似。


什么ThemeHelper啊 我的项目中没有此类。
Nemi 2014年

ThemeHelper只是我需要的帮助班。其方法isPortrait(Context)返回设备的屏幕方向是纵向还是横向。
氏族

如果一旦加载对话框然后更改方向,就会出现问题,它将保持其初始设置在onCreate
iBabur

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

3

最重要的是,许多答案都不错,但没有一个对我有充分的帮助。所以我结合了@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();

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

3
在设置布局之前显示对话框对我有用。
天使Koh

2

如果您使用的是Constraint Layout,则可以在其中设置任何视图,以通过以下方式填充屏幕的一定百分比:

layout_constraintWidth_percent =“ 0.8”

因此,例如,如果对话框中有ScrollView,并且要将其设置为屏幕高度的百分比。就像这样:

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

希望它可以帮助某人!


2

只要给AlertDialog这个主题

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

1

这是一个简短的答案(对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);

1
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT);

1

您需要使用样式@ style.xml(例如CustomDialog)来显示可定制的对话框。

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

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

        }
    });

具有对话框自定义高度的自定义对话框
Neelu Agrawal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.