如何在Android画廊中制作像“分享菜单”这样的花哨透明菜单?

时间:2011-02-14 20:56:33

标签: android coding-style menu transparent

在我的Android 2.2.2设备上,图库非常好看。我想在自己的应用程序中做的是按一个按钮,然后显示如下所示的菜单: enter image description here

这是使用任何标准的Android主题/样式吗?有没有人知道有这样一个菜单的示例代码?

编辑: 我发现可以使用Dialog来模仿这个菜单。为了简化这个例子,我在这个例子中没有使用ListView,只是对话框的一个TextView条目:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/layout_root"
              android:orientation="vertical"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:textColor="#FFF"
              android:padding="10dp"
              />
</LinearLayout>

按下按钮时显示对话框:

                Dialog dialog = new Dialog(MyActivity.this);
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

                dialog.setContentView(R.layout.custom_dialog);

                TextView text = (TextView) dialog.findViewById(R.id.text);
                text.setText("Test option 1");

                WindowManager.LayoutParams WMLP = dialog.getWindow().getAttributes();
                WMLP.gravity = (Gravity.BOTTOM | Gravity.LEFT);
                WMLP.x = 0;
                WMLP.y = 0;
                dialog.getWindow().setAttributes(WMLP);

                dialog.show();

这会创建一个靠近图片菜单的对话框。不过我还有两个问题:

1)如何在对话框底部绘制这个小三角形,如上图所示?

2)应该打开对话框的按钮水平放置在底部按钮栏的中间。因此,当我按下它时,对话框应显示在该按钮的正上方。 我想做的是:

WMLP.x = middleButton.getLeft() + (middleButton.getWidth() / 2) - dialog.getWindow().getDecorView().getPaddingLeft() - (WMLP.width / 2);

问题是,WMLP.width是-2。我想原因是布局宽度设置为“wrap_content”(即-2),此时不知道实际宽度。 那么,我如何确定对话框的宽度,以便我可以将它同心放在另一个视图上?

更新:我终于找到了这样一个对话框的很棒的来源: http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/

这正是我想要的,我现在正在我的应用程序中使用它。

3 个答案:

答案 0 :(得分:1)

您可以通过在当前位置添加PopupWindow来实现此目的,为了绘制这个很酷的菜单,您需要获得此背景的图像以及绘制的litle箭头。

此外,您应该阅读有关Nine-Path Drawable的内容。

PS:我已经完成了这项工作,但还有其他形象。

答案 1 :(得分:0)

关于对话

3个选项:

  1. 关于绘制三角形(实际上,我认为它是一个正方形,圆角被对角线分割)。我将创建后面的大方块(对话框的容器)和另一个将成为此三角形的方块(使用图像)。这会产生一些透明度问题,因为三角形会与正方形部分重叠。所以也许三角形不会透明。

  2. 另一种选择是使用自定义视图。我从来没有试过这个,但我认为你可以指定一组点并抚摸它们创建白框。内部可以是具有透明度(易于)的彩绘矩形。你的画家对象(用于绘制文本,线条,矩形的东西)有一些阴影,但我相信这将是使用手动绘图功能实现的最复杂的事情。

  3. 使用来源! (换句话说,Android是开放的......看看他们是如何在源代码中做到的)

  4. 关于视图的宽度:

    你什么时候试着获得价值?如果你在onCreate方法中执行它,它应该不起作用。当用户单击按钮时执行此操作。如果你这次已经这样做了,我无法帮助你。它应该工作。我以前做过很多次了!

    免费提示:使用view.getLocationOnScreen是一个更好的选择,而不是view.getLeft(返回到其父级的距离)。

答案 2 :(得分:0)

这可能是,或者至少可以使用PathShape构造实现的。结合ShapeDrawable,您可以构建自己的“对话框”控件。使用相同的路径,您可以定义图形{​​{3}}的剪切区域。最后,使用Canvas,您可以使用透明颜色填充画布。