2011-01-30 27 views
8

中查找顯示器(屏幕)上的查看位置(位置)我想在顯示屏上找到視圖的位置。在android

要做到這一點,我使用的方法,如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()); 
+0

在這裏,我創辦了答案。[獲取查看座標] [1] [1]:http://stackoverflow.com/questions/2224844/how-to-get-the-absolute-coordinates-of-a-view – RajaRaviVarma 2011-12-01 11:48:27

回答

1

我不知道,你可以得到視圖的位置佈局階段之前已完成。一旦視圖被佈置,您可以使用getLocationOnScreen來獲取視圖的位置。 getTop及其類似僅返回視圖在其父項中的位置。

7

使用getLeft(),getRight(),getTop()getBottom()。這些可以在視圖實例化後使用。

+28

這些方法給出相對於其父母的視圖位置**。 – ilkinulas 2012-01-28 17:59:41

+0

@ilkinulas所以相對於設備的解決方案是什麼? – 2014-11-17 12:31:42

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

5

你寫的方法已經足夠 找到屏幕上的位置,但是你寫的地方是不正確的。

嘗試在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()); 
     } 
    } 

**

它會解決您的問題。

6

最簡單的方法是開始使用 View.getLocationOnScreen();getLocationInWindow();

它,如果你想相對位置根辣油噸然後See