我有一个RelativeLayout,在这个布局中我有fab按钮:
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="8dp"/>
现在,我想在java中,屏幕上的fab位置在哪里。我根据这篇文章使用了这个方法:enter link description here
private Point getPointOfView(View view) {
int[] location = new int[2];
view.getLocationInWindow(location);
return new Point(location[0], location[1]);
}
并使用这样的方法:
fab = findViewById(R.id.fab);
for (int i = 0; i < pv.length; i++) {
pv[i] = new Point(getPointOfView(fab).x ,getPointOfView(fab).y);
}
但getPointOfView(fab).x and getPointOfView(fab).y
返回0.我可以检索X&amp; Y fab按钮?
答案 0 :(得分:1)
您可以使用View#post()
API,然后您的代码将替换为此代码:
FloatingActionButton fab = findViewById(R.id.fab);
fab.post(new Runnable() {
@Override
public void run() {
// this callback will be executed after view is laid out
for (int i = 0; i < pv.length; ++i) {
pv[i] = new Point(getPointOfView(fab).x ,getPointOfView(fab).y);
}
}
})
答案 1 :(得分:0)
使用
View.getLocationOnScreen()
获取值的方法。 注意:尝试在处理程序
中使用此方法new Handler ().post(...... v.getLocationOnScreen(location); .....);
onCreate方法是提前获取位置,当应用程序结束所有与视图相关的任务时,我们应该在onWindowFocusChanged()
活动方法中尝试此操作。
答案 2 :(得分:0)
我发现,我怎么能得到晶圆厂的位置:
fab.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
for (int i = 0; i < pv.length; i++) {
pv[i] = new Point(getPointOfView(fab).x, getPointOfView(fab).y);
}
fab.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
但如果我错误地删除了GloabalLayout,请给我打电话。