控制不同屏幕方向的自定义警报对话框的尺寸

时间:2016-11-24 07:39:51

标签: android alertdialog android-alertdialog screen-orientation

我想根据屏幕方向为自定义提醒对话框设置尺寸。我的目的是交换高度和宽度值,以使盒子看起来像是相同的大小,但处理各种设备的各种屏幕尺寸,由于Android碎片似乎很难在所有设备上实现相同的效果。 Android的自动调整大小对我来说似乎很奇怪。

肖像

alertDialog.width=screen.width*0.8
alertDialog.height=screen.height=0.5

风景

alertDialog.width=screen.width*0.5;
alertDialog.height=screen.height*0.8

请注意,自定义提醒对话框必须使用相同的代码,并支持从JellyBean(至少4.2)到Nougat(7)的Android版本。

我正在使用android.support.v7.AlertDialog(最新的可用东西)

我认为现在应该避免使用android.app.Dialog(老了)

另外,我需要一个黑色边框和白色背景。我无法在所有设备上实现相同的效果,(我需要圆角的透明度)

我使用 android:windowMinWidthMajor android:windowMinWidthMinor ,但它们会影响两种布局(纵向和横向) )如果内容不符合指定的约束条件,似乎会被忽略。

我希望 android:windowMaxWidthMinor & android:windowMaxWidthMajor

2 个答案:

答案 0 :(得分:0)

这是我用于调整页面上特定视图大小的内容:

myView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
    item.height = myView.getHeight();
});

将其应用于您想要做的事情:

myView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
    LayoutParams params = (get the layout params according to the layout);
    params.width = myView.getWidth() * 0.5;
    params.height = myView.getHeight() * 0.8;
    myView.setLayoutParams(params);
});

您必须使用侦听器,因为该对象将被添加到视图树中,将被测量并准备显示,但尚未显示,因此您可以在可见之前更改其尺寸。 / p>

答案 1 :(得分:0)

<强>更新

我可以通过为我的布局设置android:layout_centerInParent="true"来实现它。和样式中每个组件的布局值

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"

实现中心对齐。

https://github.com/computingfreak/CFTest/blob/master/app/src/main/res/layout/alert_popup.xml

提供的XML代码

Java代码可在 https://github.com/computingfreak/CFTest/blob/master/app/src/main/java/net/cf/sms/cftest/MainActivity.java

我想知道这行代码是多余的

view.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

因此将其留给Android系统来决定尺寸并根据内容调整大小。它适用于我的情况,但在长文本的情况下会失败,也许某种滚动布局会有所帮助。干杯!