2012-03-30 31 views
23

tôi có thành phần này:Định tâm văn bản của TextView theo chiều dọc trong mối liên hệ với hình ảnh drawableLeft nó

<TextView 
    android:id="@+id/item_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:drawableLeft="@drawable/icon" /> 

Những hình ảnh trong các thuộc tính drawableLeft lớn hơn phông chữ của văn bản, vì vậy tôi muốn các văn bản làm trung tâm theo chiều dọc trong mối quan hệ cho hình ảnh. Làm thế nào tôi có thể có được hiệu ứng này?

Trả lời

79

Bạn muốn lưu ý "trọng lực" này không bị nhầm lẫn với trọng lượng bố cục, trọng lượng bố cục di chuyển toàn bộ khung nhìn, trong khi trọng lực di chuyển văn bản trong chế độ xem văn bản.

<TextView 
    android:id="@+id/item_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:drawableLeft="@drawable/icon" 
    android:gravity="center_vertical" /> 
+1

Cảm ơn, trước đây tôi đã thử layout_gravity và nó không hoạt động, không biết về sự khác biệt, nhưng bây giờ nó ổn. – user940016

+0

cảm ơn bạn rất nhiều ... nó hoạt động cho tôi cũng như – xFighter

0

Bạn nên đặt cả DrawableTextView bên trong một RelativeLayout và sử dụng thuộc tính layout_alignBaseline trên TextView của bạn.

Bạn cũng có thể đặt chỉ là hai mặt hàng, DrawableTextView bên trong một LinearLayout với một định hướng horizontallayout_height="wrap_content" và sử dụng layout_gravity="center_vertical" trên TextView của bạn.

+0

sử dụng android: gravity sẽ là một phương pháp sạch hơn và nhanh hơn nhiều, mặc dù điều này sẽ giúp bạn linh hoạt hơn một chút để thay đổi kích thước hình ảnh, v.v. – Merkidemis

+0

Cảm ơn vì điều này , Tôi không muốn sử dụng drawableLeft vì biểu tượng là nhỏ và tôi muốn có một ImageButton thay thế. Tôi đã rối tung xung quanh với lợi nhuận cho đến khi tôi đến khi bạn trả lời của bạn. Được thăng hạng. – span

27

Trong Ngoài việc thiết lập mức độ nghiêm trọng, điều này cũng có thể giúp đỡ với sự liên kết trong một số trường bằng cách giảm miếng đệm trên đỉnh và đáy của TextView, mà có thể là bất bình đẳng:

android:includeFontPadding="false" 
+6

Cảm ơn, 'android: gravity' kết hợp với điều này đã giải quyết nó cho tôi! – joscarsson

+2

Vâng, nó cũng giúp tôi! Cảm ơn bạn rất nhiều! –

0

Nếu bạn không quan tâm về các điểm nhấn văn bản, chỉ cần thử android:includeFontPadding="false". Điều này sẽ xóa phần đệm trên cùng và dưới cùng của TextView. Khi đến android:gravity="center_vertical", nó không ảnh hưởng đến mã của tôi.

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