2012-01-19 37 views
8

Tôi đang cố gắng căn giữa chế độ xem cho các độ phân giải khác nhau bằng cách sử dụng bố cục và thuộc tính trọng lực, nhưng nó không hoạt động. Có cách nào để làm cho trung tâm xem tùy chỉnh theo chiều ngang trên các độ phân giải khác nhau không?Làm cách nào để căn giữa Chế độ xem tùy chỉnh trên Android?

Tôi có cần làm điều gì đó trên phương pháp onMeasure không?

Đây là một trong những điều tôi đang cố gắng ngay bây giờ, quan điểm là phía bên trái của trung tâm ..

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <RelativeLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="50dp" 
     android:gravity="center_horizontal"> 

     <com.application.app.ui.CustomView 
      android:id="@+id/ivCoinAnimation" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true"/> 


    </RelativeLayout> 


</FrameLayout> 
+0

Bạn có thể cung cấp một ví dụ nhỏ về những gì bạn đã thử không? Có thể căn giữa khung nhìn với một số LinearLayouts lồng nhau và thuộc tính gravity. – henrik

+0

Đã thêm một số ví dụ về một trong những điều tôi đã thử – tresnotas

Trả lời

1

Giả sử bạn có một View bên trong một bố cục như FrameLayout, bạn sẽ thiết lập View ' s layout_gravity đến center. Đừng trộn nó với gravity!

Ngoài ra, nó thực sự có thể cần thiết để ghi đè lên trênMeasure(). Đọc it's documentation để quyết định xem bạn có cần ghi đè lên không. Nếu bạn làm như vậy, hãy lưu ý rằng các thông số được mã hóa với View.MeasureSpec.

-1

Dưới đây là ví dụ về cách căn giữa hai nút trên màn hình. Điều này cũng sẽ hoạt động với CustomView của bạn.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical"> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal"> 

     <Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 
     <Button android:text="Button" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 

    </LinearLayout> 
</LinearLayout> 
0

Bạn nên thực hiện trong tùy chỉnh Xem lớp học của bạn

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 


Trong đó, bạn nên tính toán chiều cao và chiều rộng cho tùy chỉnh Xem của bạn. Nếu bạn cần đến trung tâm Xem tùy chỉnh của bạn trong cách bố trí mẹ - chắc chắn rằng:

  • tùy chỉnh Xem height = mẹ Xem chiều cao

VÀ/HOẶC

  • tùy chỉnh Xem chiều rộng! ! = parent Xem chiều rộng


Ví dụ:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

     final int height = mCircleRadius * 2; //calculated 
     final int width = getMeasuredWidth(); //parent width 

     setMeasuredDimension(width, height); 
    } 


Bây giờ bạn có thể sử dụng tiếp theo cho tùy chỉnh Xem bạn:

android:layout_centerHorizontal="true" 
android:layout_centerVertical="true" 

enter image description here

T.B. Bạn thấy rằng android:layout_centerHorizontal="true" không có hiệu lực. Lý do là sử dụng chiều rộng của phụ huynh trong onMeasure thay vì tính chiều rộng chính xác.

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