2011-01-30 67 views
8

Tôi muốn tìm vị trí của khung nhìn trên màn hình hiển thị.Tìm vị trí Xem (vị trí) trên màn hình (màn hình) trong android

Để làm điều đó, tôi sử dụng các phương pháp như view.getLeft(), view.getBottom(), view.getRight(), view.getTop(). Nhưng thật không may, tất cả các phương pháp này được trả về 0.
Có cách nào khác để tìm vị trí của khung nhìn (tức là tọa độ trên màn hình) không?

bố trí của tôi 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 " /> 

Và lớp học của tôi có này trong 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

Ở đây tôi đã sáng lập ra câu trả lời.[Nhận tọa độ của Xem] [1] [1]: http://stackoverflow.com/questions/2224844/how-to-get-the-absolute-coordinates-of-a-view – RajaRaviVarma

Trả lời

1

Tôi không chắc chắn rằng bạn có thể có được vị trí của quan điểm trước khi giai đoạn bố trí đã làm xong. Khi khung nhìn được đặt ra, bạn có thể sử dụng getLocationOnScreen để có được vị trí của chế độ xem. getTop và tương tự chỉ trả về vị trí của chế độ xem trong phần tử gốc.

7

Sử dụng getLeft(), getRight(), getTop()getBottom(). Đây có thể được sử dụng sau khi xem được khởi tạo.

+28

Những các phương thức cho vị trí xem ** liên quan đến ** cha mẹ của nó. – ilkinulas

+0

@ilkinulas vì vậy giải pháp cho người thân của thiết bị là gì? –

3

Bạn thực sự không thể xem chế độ xem trước. Bạn có thể muốn làm rõ ràng bằng cách sử dụng invalidate() nếu có thể hoặc bạn có thể kiểm tra điều này trong các chức năng onPostResume() hoặc onResume().

Nếu bạn chỉ cố gắng mọi thứ và muốn vui chơi với chủ đề, khối mã này sẽ đặt mã của bạn vào thread UI và sẽ chờ đợi cho tất cả mọi thứ để được trả lại và sau đó hiển thị mã của bạn:

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

Điều cuối cùng này là nâng công việc khá nặng nhưng sẽ hoàn thành công việc. Tôi thường đặt bất kỳ dòng nào như thế này trong nhật ký của mình (ví dụ: android.util.Log)

5

các phương thức bạn đã viết đủ để tìm vị trí trên màn hình, nhưng địa điểm bạn đã viết không chính xác.

cố gắng viết các phương thức (view.getLeft(), view.getTop() ... vv) trong phương thức onWindowFocusChanged (boolean hasFocus).

ví dụ ...

**

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

**

nó sẽ giải quyết vấn đề của bạn.

+1

Đây là câu trả lời hoàn hảo cho câu hỏi này. – mok

6

Cách dễ nhất là để có được nó bằng cách sử View.getLocationOnScreen(); HOẶC getLocationInWindow();

Và nếu bạn muốn vị trí tương đối để nhổ tận gốc Layou t sau đó See

Các vấn đề liên quan