6

我已使用以下代码在我的布局中获取视图的位置(x,y)坐标。我有一个按钮和以下代码来获取其在屏幕上的位置。但是在使用此代码时它会强制关闭应用程序。另请注意,此语句已在 setContentView() 之后调用。以下是代码

Toast.makeText(MainActivity.this, button1.getTop(),Toast.LENGTH_LONG).show();

以下是错误:

 E/AndroidRuntime(11630): android.content.res.Resources$NotFoundException: String resource ID #0x196

.如何在屏幕(x,y 坐标)上获取视图(在我的情况下为按钮)的位置?

4

3 回答 3

6

您使用的方法期望整数值作为R.string.whatever. 将 getTop() 返回值转换为 String 应该可以工作。

Toast.makeText(MainActivity.this, String.valueOf(button1.getTop()), Toast.LENGTH_LONG).show();

要获取按钮的 x/y(从 API 11 开始):

Toast.makeText(MainActivity.this, (int)button1.getX() + ":" + (int)button1.getY(), Toast.LENGTH_LONG).show();

文件

此视图的视觉 x 位置,以像素为单位。

对于低于 11 的 API,您的方式是正确getTop()的:相当于getY()但没有可能的动画/翻译。getLeft()getX()具有相同限制的等效项。

于 2013-07-10T11:01:15.233 回答
1

前提条件: MyButton 引用存在

AtomicInteger leftButton = new AtomicInteger();
myButton.getViewTreeObserver().addOnGlobalLayoutListener(
    () -> {
        if (leftButton.get() == 0) {
            leftSubtitle.set(myButton.getLeft());

            //do something once you get the value..
        }
    }
);
于 2019-09-17T17:44:19.323 回答
0

button1.getTop()返回一个 int 数字,Toast.makeText()将该 int 数字视为实际上不存在的字符串资源 id,因此它崩溃。

尝试使用button1.getTop() + ""更改为字符串。

于 2013-07-10T11:01:22.347 回答