2010-04-15 43 views
15

Tôi có nút định nghĩa như sau:Làm cách nào để căn giữa drawableTop và văn bản theo chiều dọc trên Nút trong Android?

<Button 
android:drawableTop="@drawable/ico" 
android:gravity="center" 
android:id="@+id/StartButton2x2" 
android:text="@string/Widget2x2StartBtnLabel" 
android:layout_width="0dip" 
android:layout_height="fill_parent" 
android:layout_weight="1" 
android:background="@drawable/widgetbtn_bg" 
/> 

Vấn đề là hình ảnh 'drawableTop' được liên kết đến biên giới trên của quan điểm nút. Tôi muốn căn giữa nó (cùng với nhãn văn bản) theo chiều dọc trên nút.

'android: gravity' dường như chỉ hoạt động trên nhãn văn bản. Nó không ảnh hưởng đến vị trí 'drawableTop'.

Tôi đã có thể căn giữa theo chiều dọc bằng cách sử dụng 'android: paddingTop' - nhưng điều đó dường như không phải là một ý tưởng hay. Tôi đoán nó sẽ không hoạt động đúng trên độ phân giải/kích thước màn hình khác nhau.

+0

drawableTop, như tên gọi của nó, luôn căn chỉnh mức có thể kéo lên đầu nút. Hãy thử drawableLeft thay vào đó, hoặc nếu bạn muốn nó đằng sau văn bản, android: background. –

Trả lời

12

câu trả lời mới

Rõ ràng tôi hiểu lầm câu hỏi. Câu trả lời là sử dụng:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    style="@android:style/Widget.Button"> 

... và kèm theo một ImageViewTextView bên trong.


Cũ câu trả lời

Dưới đây là một ý nghĩ: quấn nút của bạn trong một FrameLayout. Soemthing like:

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:foreground="@drawable/ico" 
    android:foregroundGravity="center"> 
    <Button 
     android:gravity="center_vertical" 
     android:id="@+id/StartButton2x2" 
     android:text="@string/Widget2x2StartBtnLabel" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:background="@drawable/widgetbtn_bg" /> 
</FrameLayout> 

Btw, có gì với android:layout_width="0dip"? Có vẻ không đúng.

+0

Điều này gần như hoạt động. Nhưng hiệu ứng có một chút khác biệt - Bây giờ tôi có nhãn của tôi trên đầu biểu tượng của tôi. Tôi muốn có nó bên dưới biểu tượng, nhưng cả hai cùng nhau tập trung vào nút. – grzaks

+0

Giải pháp với kiểu LinearLayout hoạt động rất tốt. – grzaks

+0

@Felix, bạn sử dụng 'android: layout_width =" 0dp "' khi sử dụng 'android: layout_weight'. Điều này yêu cầu Android sử dụng các trọng số để tìm ra kích thước dựa trên số lượng không gian có sẵn trong bố cục kèm theo. – karl

9

'android: gravity' dường như chỉ hoạt động trên nhãn văn bản. Nó không ảnh hưởng đến vị trí 'drawableTop'.

Đúng.

tôi đã có thể tập trung nó theo chiều dọc sử dụng 'android: paddingTop' - nhưng điều đó dường như không phải là một ý tưởng tốt. Tôi đoán nó sẽ không hoạt động đúng trên độ phân giải/kích thước màn hình khác nhau.

Bạn có thể giải quyết vấn đề này bằng cách sử dụng tài nguyên tham số.

Tuy nhiên, ngoài việc đệm, bạn không thể "căn giữa drawableTop và văn bản theo chiều dọc trên Nút". Các tính năng drawable của Button không phải là rất cấu hình.

+0

Ok sau đó, tôi sẽ thử với padding sau đó. Cảm ơn – grzaks

+0

SO thực sự cần một tính năng để +1 câu trả lời cho đúng, nhưng -1 nó cho không thích câu trả lời. – Justin

+0

Sử dụng android: paddingTop trong bố cục nút làm việc cho tôi để căn giữa theo chiều dọc drawableTop. 1 cho câu trả lời đúng. –

-2

Sử dụng android:drawableTop="@drawable/Icon" thay vì nền

Đừng quên thay đổi

android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
-1
<Button 
    android:id="@+id/....." 
    android:............... 
    ....................... 
    android:gravity="center_horizontal" 
/> 

Tôi đã ok với nó.

0

Bạn có thể sử dụng chế độ xem văn bản với thuộc tính của nó.

<LinearLayout 
      style="@android:style/Widget.Button" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical" > 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:drawableLeft="@drawable/.." 
       android:text="" /> 
     </LinearLayout> 
Các vấn đề liên quan