0

我真的一直在努力解决这个问题,无论我做什么,我都会让弹出窗口出现在我不想要的地方。我希望它出现在我单击/触摸的位置,或者在我点击图像时与我触摸的位置有一点偏移。

这是我在 xml 中为点击图像时设置的方法:

public void loadPopUp(View v) {

    popUp.showAtLocation((View) v.getParent().getParent(),
            Gravity.NO_GRAVITY, 0, 0);
    popUp.update(v.getLeft(), "No clue what to put here", 300, 80);

}

2 关于弹出窗口的事情我只是不确定。我是否应该将 showAtLocation 的第一个参数设为根视图,以便包含整个布局,而不仅仅是视图所在的布局?

此外,我“不知道该放什么”,因为我无法让我的 y 坐标正常工作。我的 x (v.getLeft()) 很好,因为我的应用程序不会左右移动,只是上下移动是我努力获取用户点击图像的位置。

XML:

<ScrollView xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="small" >

<LinearLayout
    android:id="@+id/godOverview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

<LinearLayout
        android:id="@+id/godItemRowOneLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/godItem1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:clickable="true"
            android:contentDescription="@string/god_recommended_item_1"
            android:onClick="loadPopUp"
            android:paddingBottom="3dp"
            android:paddingTop="3dp"
            android:src="@drawable/ic_launcher" />

        <ImageView
            android:id="@+id/godItem2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:clickable="true"
            android:contentDescription="@string/god_recommended_item_2"
            android:onClick="loadPopUp"
            android:paddingBottom="3dp"
            android:paddingTop="3dp"
            android:src="@drawable/ic_launcher" />

        <ImageView
            android:id="@+id/godItem3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:contentDescription="@string/god_recommended_item_3"
            android:onClick="loadPopUp"
            android:paddingBottom="3dp"
            android:paddingTop="3dp"
            android:src="@drawable/ic_launcher" />

    </LinearLayout>
</LinearLayout>

</ScrollView>
4

1 回答 1

0

我是否应该将 showAtLocation 的第一个参数设为根视图,以便包含整个布局,而不仅仅是视图所在的布局?

不,这是弹出窗口应该锚定到的视图,因此它应该是被触摸以触发弹出窗口的视图。

此外,我“不知道该放什么”,因为我无法让我的 y 坐标正常工作。

你把它复杂化了。如果您在第一次调用时将其锚定,则无需设置 x 和 y,只需设置高度和宽度(顺便说一下,您应该将其作为屏幕密度的函数来计算)。

笔记:

PopupMenu 在锚定到视图方面具有更智能的行为,但它只显示菜单。不过,您可以浏览源代码以查看它们如何处理布局。

于 2013-10-07T23:47:29.807 回答