AlertDialog在横向中显示具有方向的横向视图

时间:2012-02-24 12:48:12

标签: android orientation alertdialog landscape-portrait

我的应用程序的主要活动在清单中设置为始终处于纵向视图。当我将应用程序加载到平板电脑上时,此工作正常。

然而,当我使用我的菜单按钮并单击“设置”(打开AlertDialog以扩展xml布局时,平板电脑将显示整个对话框的左侧2/3左右。其余的都在屏幕右侧。如果我在平板电脑上安装我的应用程序,同时在应用程序未运行时将平板电脑转为横向模式(即使我返回到Portrait并单击应用程序),也会出现这种情况。该对话框甚至调用this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);以确保它保持纵向(即使此调用仍然存在问题)。

换句话说,AlertDialog在纵向视图中显示的方式是它正在炸毁一个横向视图(因此其中一些在屏幕外),即使{{1}的实际方向是肖像,就像它应该的那样。

(如果上面的措辞令人困惑,我道歉 - 如果需要,请我澄清一下。)

那么为什么平板电脑会这样做呢?我已经在一些Android手机上进行了测试,这种情况不会发生,所以我不明白平板电脑为什么会这样做。

侧面说明:

  • 对于这个AlertDialog,这甚至都没有发生..如果我启动应用程序,我在应用程序开头显示的EULA(另一个AlertDialog)也会出现这种情况在横向模式中。

  • 我甚至通过删除指定纵向/横向模式的所有调用来允许景观的可用性,并且平板电脑在仅在平板电脑上以纵向视图保持时仍在屏幕外消耗对话框,但是不是电话。

修改

此代码在手机上运行良好,但平板电脑问题仍然存在。如果我取消注释下面的AlertDialog,平板电脑和手机会显示我想要的尺寸,但会显示黑度而不是灰色的主屏幕。有什么想法吗?

调用函数执行此操作:

dialog.show();

调用函数调用的函数:

showDialog(EXAMPLE_CASE);

1 个答案:

答案 0 :(得分:7)

你可以尝试获取这样的屏幕尺寸:

Display display = getWindowManager().getDefaultDisplay(); 
int mwidth = display.getWidth();
int mheight = display.getHeight();

然后像这样改变Dialog

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

d.show();

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = mwidth;
lp.height = myheight;

//change position of window on screen
lp.x = mwidth/2; //set these values to what work for you; probably like I have here at
lp.y = mheight/2;        //half the screen width and height so it is in center

//set the dim level of the background
lp.dimAmount=0.1f; //change this value for more or less dimming

d.getWindow().setAttributes(lp);

//add a blur/dim flags
d.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND | WindowManager.LayoutParams.FLAG_DIM_BEHIND);

另外,您说您正在为自定义布局进行充气。您是否尝试过修改该布局中的layout_heightlayout_width视图,看看是否会产生影响?