【问题标题】:Android Activity with Transparent Layout具有透明布局的 Android Activity
【发布时间】:2013-07-23 22:54:42
【问题描述】:

我希望创建一个看起来像弹出窗口的活动

那是活动的透明背景,我希望在设备屏幕右上角的屏幕上的自定义位置显示它

我所做的是在 onCreate 的 pop over like activty 中

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

在 maifest 中

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

这就是我的启动器活动的样子

所以当我点击操作栏上的搜索时,我正在向我的新活动发送意图。我想让它看起来像搜索图标下方的弹出窗口 这是我得到的是

您可以看到点击搜索以前的活动并加载新活动(蓝色部分)。 如您所见,新活动移动到屏幕中心。但我希望它位于操作栏图标下方。

我试过params.gravity = Gravity.TOP | Gravity.RIGHT;。然后我得到了这个

我想把它放在上一个活动的操作栏下方。我尝试了很多方法来实现它,但都失败了。所以任何人都可以提出一个方法

【问题讨论】:

    标签: android android-activity android-view android-dialog


    【解决方案1】:

    在你的清单中你写了

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

    您应该删除 NoActionBar 部分

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

    【讨论】:

    • 如果给出,它将在我的活动中显示标题栏。我不想表现出来
    • 但是在你的问题中你说你希望它在操作栏下方,如果你不使用操作栏,你如何检测它是否在操作栏下方?
    • 那是我的问题,屏幕截图中的蓝色是一项活动。没有标题栏/操作栏,您在其后面看到的是导航到此活动的先前活动。
    • 我不明白你,你是否想要操作栏?如果您不想要,如何将您的弹出窗口定位在操作栏下方?没有意义
    • 当您尝试删除 params.gravity = Gravity.TOP |重力.RIGHT;
    【解决方案2】:

    我能想到两件事可能会有所帮助。首先,您可以尝试将manifest 中的Theme 更改为android:theme="@android:style/Theme.Dialog,这应该会给您想要的外观。

    编辑

    你可以隐藏标题栏

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    

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

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

    【讨论】:

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

    @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 哦,太好了!你找到了答案。因此,请在此处提供您的解决方案,如果我的回答也是正确且有用的,那么请投票给答案或接受答案,以便如果有人遇到同样的问题,可以在这里找到答案。 :)
    【解决方案4】:

    尝试重力居中而不是右上角..

    【讨论】:

    • 我希望它出现在屏幕的右侧,这就是我给它的原因。如果给中心它会移动到屏幕的中心
    • 如果是,那么给参数上边距,看看它是如何反应的??
    猜你喜欢
    • 1970-01-01
    • 2022-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多