8

我想在显示屏上找到视图的位置。

为此,我使用view.getLeft(), view.getBottom(), view.getRight(),等方法view.getTop()。但不幸的是,所有这些方法都返回了0
有没有其他方法可以找到视图的位置(即屏幕上的坐标)?

我的布局main.xml

<TextView android:id="@+id/tv1"
    android:layout_width="200px"
    android:layout_height="30px"
    android:text="welcome to" />

<TextView android:id="@+id/tv2"
    android:layout_width="200px"
    android:layout_height="30px"
    android:text=" Make Eit solution " />

我的班级有这个onCreate()

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

tv1 = (TextView) findViewById(R.id.tv1);
tv2 = (TextView) findViewById(R.id.tv2);

System.out.println("tv4 width:"+tv2.getWidth());
System.out.println("tv4 height:"+tv2.getHeight());
System.out.println("Right:"+tv2.getRight());
System.out.println("Left:"+tv2.getLeft());
System.out.println("Top:"+tv2.getTop());
System.out.println("Bottom:"+tv2.getBottom());
4

5 回答 5

8

最简单的方法是使用 View.getLocationOnScreen(); OR getLocationInWindow();

如果您想要相对于根 Layou t的位置,请参见

于 2014-04-21T11:50:36.763 回答
6

使用getLeft(), getRight(),getTop()getBottom(). 这些可以在视图实例化后使用。

于 2011-02-09T14:12:36.717 回答
6

你写的方法足以在屏幕上找到位置,但是你写的地方不正确。

尝试在onWindowFocusChanged(boolean hasFocus)方法中编写方法(view.getLeft()、view.getTop()...等)。

例如...

**

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
                System.out.println("Right:"+tv2.getRight());
                System.out.println("Left:"+tv2.getLeft());
                System.out.println("Top:"+tv2.getTop());
        }
    }

**

它会解决你的问题。

于 2013-07-25T10:57:31.113 回答
3

您真的无法事先获得视图。如果可能,您可能想要显式使用invalidate(),或者您可以在onPostResume()oronResume()函数中检查它。

如果您只是在尝试并想享受线程的乐趣,此代码块会将您的代码放到 UI 线程上,并等待所有内容都被渲染,然后显示您的代码:

final View gv = this;
ViewTreeObserver vto = gv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @SuppressLint("NewApi")
    public void onGlobalLayout() {
        gv.getViewTreeObserver().removeGlobalOnLayoutListener(this);

        tv1=(TextView)findViewById(R.id.tv1);
        tv2=(TextView)findViewById(R.id.tv2);
        System.out.println("tv4 width:"+tv2.getWidth());
        System.out.println("tv4 height:"+tv2.getHeight());
        System.out.println("Right:"+tv2.getRight());
        System.out.println("Left:"+tv2.getLeft());
        System.out.println("Top:"+tv2.getTop());
        System.out.println("Bottom:"+tv2.getBottom());
}

最后一个是相当繁重的提升,但它会完成工作。我通常在我的日志中放任何这样的行(即android.util.Log

于 2013-01-07T23:22:47.460 回答
2

我不确定您是否可以在布局阶段完成之前获得视图的位置。布局视图后,您可以使用它getLocationOnScreen来获取视图的位置。getTop和类似的只返回视图在其父视图中的位置。

于 2011-02-01T12:33:40.523 回答