如何在按钮上准确显示Toast

时间:2011-06-15 09:05:19

标签: android xml toast

我有各种XML布局。在所有这些布局中,我都有按钮,但每个布局中按钮的位置不同。在我的活动中,这些布局随机膨胀(任何布局都可以到达前台)。由于所有XML布局的内容都相同,因此它们有一个共同点,那就是按钮的ID。在每个xml文件中,只有(android:layout_marginTop =“145sp”和android:layout_marginBottom =“45sp”)与按钮不同。

因此,如果在特定角落显示名为“ALI”的按钮,则下次可能会在屏幕的另一角显示相同的按钮“ALI”。

现在,在我的活动中,我想要它,以便每当我点击按钮时,其相关图像应该以{{1​​}}的形式显示在按钮上。

但由于按钮位置不固定,我无法在按钮上准确显示Toast。无论按钮位置如何,我得到的Toast的位置都是固定的。但是我想让它直接显示在按钮上。

我使用了以下代码。如果在运行时有任何方法可以告诉Toast按钮的像素位置,那么它会有点方便。

单击按钮事件后,代码如下:

OnClickListener

3 个答案:

答案 0 :(得分:6)

toast.setGravity(Gravity.RIGHT |Gravity.TOP, view.getLeft(), view.getTop()+(view.getBottom()-view.getTop())/2);

它应该有用

答案 1 :(得分:1)

而是围绕给出值......就像toast.setGravity(5,6,5);一样,并尝试其他值..

答案 2 :(得分:1)

我找到了一个对我来说很好的例子。此示例将Toast放在收到的视图上:

public void onClick(View v) {
int xOffset = 0, yOffset = 0;
Rect gvr = new Rect();

View parent = (View) v.getParent();
if (parent.getGlobalVisibleRect(gvr)) {
    View root = v.getRootView();

    int halfwayWidth = root.getRight() / 2;
    int halfwayHeight = root.getBottom() / 2;
    // get the horizontal center
    int parentCenterX = ((gvr.right - gvr.left) / 2) + gvr.left;
    // get the vertical center
    int parentCenterY = (gvr.bottom - gvr.top) / 2 + gvr.top;

    if (parentCenterY <= halfwayHeight) {
        yOffset = -(halfwayHeight - parentCenterY);                                     
    } else {
        yOffset = parentCenterY - halfwayHeight;
    }
    if (parentCenterX < halfwayWidth) { 
        // this view is right of center
        xOffset = parentCenterX - halfwayWidth;
    }
}
Toast toast = Toast.makeText(mContext, "Your String", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, xOffset, yOffset);
toast.show();
}

有关详情,请查看我找到此示例的位置:Repositioning Toast Messages