我使用以下代码来获取布局中视图的位置(x,y)坐标。我有一个按钮和以下代码来获取它在scren上的位置。但是当它使用时强制关闭应用程序这段代码。另请注意,此语句已在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坐标)?
答案 0 :(得分:4)
您使用的方法期望整数值作为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();
Doc:
此视图的可视x位置(以像素为单位)。
对于低于11的API,您的方法是正确的:getTop()
相当于getY()
,但没有可能的动画/翻译。 getLeft()
是具有相同限制的getX()
的等价物。
答案 1 :(得分:0)
button1.getTop()
返回一个int号,Toast.makeText()
将该int号视为字符串资源id,实际上并不存在,因此崩溃。
尝试使用button1.getTop() + ""
更改为字符串。
答案 2 :(得分:0)
前提条件:存在MyButton引用
AtomicInteger leftButton = new AtomicInteger();
myButton.getViewTreeObserver().addOnGlobalLayoutListener(
() -> {
if (leftButton.get() == 0) {
leftSubtitle.set(myButton.getLeft());
//do something once you get the value..
}
}
);