Android透明布局的活动界面

7
我希望创建一个类似弹出窗口的活动。该活动具有透明背景,并且我希望在设备屏幕的右上角自定义位置显示它。我在弹出式活动的onCreate方法中进行了以下操作:
Display display = getWindow().getWindowManager().getDefaultDisplay();
    WindowManager.LayoutParams params = getWindow().getAttributes();
    // params.x = -20;
    params.height = (display.getHeight()) / 2;
    params.width = (display.getWidth()) / 2;
    // params.y = -10;
    params.gravity =  Gravity.RIGHT;
    getWindow().setAttributes(params); 

在清单文件中。
 <activity android:name=".DialogAct"
           android:theme="@android:style/Theme.Holo.Light.NoActionBar"></activity>

这是我的启动器活动的外观。
当我在操作栏上点击搜索时,我会发送意图到新的活动。我希望它看起来像是弹出框,就在搜索图标下面。 这是我得到的: 可见先前活动的搜索被点击并加载了新活动(蓝色区域)。 正如你所看到的,新活动移动到屏幕中心。但我想将它放在操作栏图标下方。 我尝试过 params.gravity = Gravity.TOP | Gravity.RIGHT;,然后我得到了这个: 我想把它放在先前活动的操作栏下面。我尝试了很多方法,但都失败了。因此,有人能推荐一种方法吗?
4个回答

0

@edwin 你可以做的是在完成之后

params.gravity = Gravity.TOP | Gravity.RIGHT;

你只需从顶部提供一些边距,就像这样:

  LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  params.setMargins(left, top, right, bottom);
  yourCustomPopOveractivity.setLayoutParams(params);

我认为在完成这些操作后,您可以获得所需的位置,而且您所做的一切都是正确的。

请尝试并告诉我。


首先感谢你的努力。实际上,在以另一种方式发布问题后,我通过 XML 中的小技巧找到了解决方法。 - edwin
@edwin 太好了!你找到答案了。请在这里提供你的解决方案,如果我的回答也正确并且有用,请投票支持或接受答案,这样如果其他人遇到同样的问题,就可以在这里找到答案。 :) - Deepika Lalra

0

在你的清单文件中写了

<activity android:name=".DialogAct"
           android:theme="@android:style/Theme.Holo.Light.NoActionBar">

你应该移除 NoActionBar 部分。

<activity android:name=".DialogAct"
           android:theme="@android:style/Theme.Holo.Light">

如果给定,它将在我的活动中显示标题栏。我不想显示它。 - edwin
但是在你的问题中,你说你想要它在操作栏下面,如果你不使用操作栏,你怎么检测它是否在操作栏下面呢? - Onur A.
这就是我的问题,屏幕截图中的蓝色部分是一个活动。没有标题栏/操作栏,你看到的背后是导航到该活动的上一个活动。 - edwin
我不明白你的意思,你想要ActionBar吗?如果你不想要,那么如何将弹出窗口定位在ActionBar下方呢?这没有任何意义。 - Onur A.
当您尝试删除params.gravity = Gravity.TOP | Gravity.RIGHT时,会发生什么? - Onur A.

0
我能想到两件事可能会有所帮助。首先,您可以尝试在您的清单中更改Themeandroid:theme="@android:style/Theme.Dialog,这样应该会给您想要的外观。 编辑 您可以使用以下代码隐藏标题栏:
this.requestWindowFeature(Window.FEATURE_NO_TITLE);

确保在调用setContentView()之前调用它

此外,如果不需要单独的Activity,可以使用PopupWindow。使用此功能,您可以使用isAboveAnchor并将ActionBar用作锚点,并将其放置在下方或使用其他相关方法之一。我不知道这两个是否能满足您的需求,但它们可能适合您。


我尝试更改主题,但它并没有帮助它显示标题栏。在我的情况下应避免这种情况。我不能选择弹出式窗口,因为我的活动中将要发生许多片段事务。所以我需要完全控制它。这就是为什么我采取了这种方法。 - edwin
如果标题栏是您在第一个解决方案中唯一的问题,那么请查看我的编辑。这将允许您隐藏标题栏。 - codeMagic
我尝试过了,但仍然无法达到我所需的目标。请您检查一下编辑是否正确。 - edwin
用自己的方式解决了问题,创建了自定义主题。感谢您的指导。 - edwin
不客气。我很高兴你解决了它。如果这些答案都没有帮助到你,你可以发布自己的解决方案并接受它。 - codeMagic

-1
尝试将重心设置为中心而不是右上角。

我希望这个在屏幕右侧,所以我给了那个位置。如果给中心位置,它会移动到屏幕中央。 - edwin
如果是,则将参数的顶部边距设置为较大值,以查看其反应如何? - Armaan Stranger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接