在android中查找显示(屏幕)上的View位置(位置)

时间:2011-01-30 05:48:47

标签: android android-layout android-view

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

为此,我使用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());

5 个答案:

答案 0 :(得分:7)

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

如果你想要相对于根Layou的位置 t,那么See

答案 1 :(得分:6)

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

答案 2 :(得分:5)

你写的方法就足够了 在屏幕上找到该位置,但您所写的地方不正确。

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

例如......

**

@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());
        }
    }

**

它将解决您的问题。

答案 3 :(得分:3)

你真的无法预先获得视图。如果可能,您可能希望使用invalidate()进行明确说明,或者您可以在onPostResume()onResume()函数中进行检查。

如果你只是想尝试一下并希望获得线程的乐趣,这个代码块会将你的代码放到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

答案 4 :(得分:2)

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