为Android自定义快速操作对话框

5
我正在开发一个应用程序,需要在按钮点击时显示快速操作对话框。以下是我想要实现的示例:

What I want to implement.

到目前为止,我还没有想出如何制作自定义的快速操作对话框。但我尝试使用活动,并且已经接近我所要实现的效果。以下是我目前所做的:
在按钮点击时,我将意图传递给活动:
if (v.getId() == R.id.points) {
        Toast.makeText(MainActivity.this, "Clicked on points",
                Toast.LENGTH_SHORT).show();
        Intent i = new Intent(MainActivity.this, PointsActionMenu.class);
        startActivity(i);
    }

我已经使用styles.xml使活动透明。

styles.xml文件

<style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

我实现了这些功能,现在在我的屏幕上看到了这个用户界面。

达到这里

现在,我有两个问题:

  1. 我使用了activity并设计了一个布局以满足我的需求。是否有一种简单的方法可以使用快速操作对话框来实现这一点?我已经查阅了2-3个相关示例,但我无法根据自己的需求进行定制。
  2. 就我目前使用activity的情况而言,它显示在屏幕中央,我能否将activity的默认位置更改为右上角,如图所示。

任何一种答案都可以帮助我。

非常感谢您的帮助。


你尝试过使用 android:gravity 解决问题 #2 吗? - Emil Davtyan
2个回答

2

我想我解决了我的问题。现在它看起来像这样。

我找到的

为设置其位置,集成了以下代码。

WindowManager.LayoutParams wmlp = this.getWindow().getAttributes();

    wmlp.gravity = Gravity.TOP | Gravity.LEFT;
    wmlp.x = 80; // x position
    wmlp.y = 60; // y position

你在其他屏幕尺寸和密度上测试过吗?除非你只想让它在单一设备上运行,否则这可能会在以后给你带来麻烦。 - RobGThai
@Anupam 我也开发过类似的弹出对话框。你能分享一下你的弹窗代码吗? - GrIsHu

2

您可能需要考虑在不同设备和屏幕大小上发生的情况。可以使用以下方法将像素缩放为dp:

int x = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics());
int y = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics());

今日免费次数已满, 请开通会员/明日再来
wmlp.x = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics());
wmlp.y = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics());

我应该在哪里实现这个? - Anupam
我编辑了我的回复。-该函数将提供的任何“像素”值转换为相应的“dp”值。 - LuckyMe

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