2010-07-26 28 views

Trả lời

144

TextView có một tài sản android:drawablePadding mà nên làm các trick:

android: drawablePadding

Các padding giữa drawables và văn bản.

Phải là giá trị thứ nguyên, là số dấu phẩy động được thêm với đơn vị như "14.5sp". Các đơn vị có sẵn là: px (pixel), dp (pixel độc lập mật độ), sp (pixel được chia tỷ lệ dựa trên kích thước phông chữ ưa thích ), tính bằng inch (inch), mm (mm).

này cũng có thể là một tham chiếu đến một tài nguyên (theo mẫu "@ [gói:] loại: name") hoặc thuộc tính chủ đề (theo mẫu "? [Gói:] [loại:] Tên") chứa một giá trị thuộc loại này.

Điều này tương ứng với biểu tượng tài nguyên thuộc tính chung drawablePadding.

49

android:drawablePadding sẽ chỉ tạo khoảng cách đệm giữa văn bản và đối tượng có thể vẽ nếu nút đủ nhỏ để gộp hai chữ này lại với nhau. Nếu nút của bạn rộng hơn chiều rộng kết hợp (đối với drawableLeft/drawableRight) hoặc chiều cao (đối với drawableTop/drawableBottom) thì drawablePadding không làm gì cả.

Tôi đang đấu tranh với điều này ngay bây giờ. Các nút của tôi khá rộng và biểu tượng treo ở cạnh trái của nút và văn bản được đặt ở chính giữa. Cách duy nhất của tôi để có được khoảng này bây giờ đã được để nướng trong một lề trên drawable bằng cách thêm các điểm ảnh trống để cạnh trái của vải với photoshop. Không lý tưởng, và cũng không được đề nghị. Nhưng đó là giải pháp dừng lỗ của tôi bây giờ, ngắn xây dựng lại TextView/Button.

+0

cảm ơn vì giải thích vấn đề của tôi. Tôi đã không nhận ra rằng nó chỉ gây ra khi nút đủ rộng –

368

Vì cephus được đề cập android:drawablePadding sẽ chỉ ép buộc phần đệm giữa văn bản và có thể vẽ nếu nút đủ nhỏ.

Khi đặt các nút lớn hơn, bạn có thể sử dụng android:drawablePadding kết hợp với android:paddingLeftandroid:paddingRight để buộc văn bản và có thể kéo vào bên trong về phía giữa nút. Bằng cách điều chỉnh phần đệm trái và phải riêng biệt, bạn có thể thực hiện các điều chỉnh rất chi tiết cho bố cục.

Dưới đây là một ví dụ sử dụng nút đệm để đẩy văn bản và biểu tượng xích lại gần nhau hơn họ sẽ theo mặc định:

<Button android:text="@string/button_label" 
    android:id="@+id/buttonId" 
    android:layout_width="160dip" 
    android:layout_height="60dip" 
    android:layout_gravity="center" 
    android:textSize="13dip" 
    android:drawableLeft="@drawable/button_icon" 
    android:drawablePadding="2dip" 
    android:paddingLeft="30dip" 
    android:paddingRight="26dip" 
    android:singleLine="true" 
    android:gravity="center" /> 
+11

android: paddingLeft = "30dip" android: paddingRight = "26dip" là chìa khóa ở đây! –

+2

điều này không liên quan đến câu hỏi, nhưng android: gravity = "center" sẽ giữ cho văn bản được căn chỉnh với trung tâm của hình vẽ! – cwhsu

+0

Điều gì sẽ xảy ra nếu chúng ta có cả hai hình vẽ ở bên trái và bên phải, và chỉ phải điều chỉnh đúng? – nmxprime

6

Thay vì sử dụng nút LinearLayout với ImageView và TextView bên trong. Trong các mục con như ImageView và TextView, hãy sử dụng android: duplicateParentState = "true".

+0

Bạn sẽ thực sự cần một FrameLayout và một Button (và ImageView/TextView bên trong LinearLayout của riêng mình) để tái tạo giao diện nút Button và chuyển onclicklistener() đến phần nút – 3c71

+0

Tại sao sử dụng bố cục bổ sung nếu bạn đã có drawablePadding trong TextView. –

-3

Cố gắng sử dụng padding tiêu cực

Giống như:

android:paddingLeft="-8dp" 
11

xác định hình dạng cho EditText của bạn và cung cấp cho nó một lớp đệm Ví dụ

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 
    <padding 
     android:left="5dp" 
     android:right="5dp" 
    /> 
    <solid android:color="#F6F6F6" /> 
    <stroke 
     android:width="1px" 
     android:color="#C3C3C3" /> 

    <corners 
     android:bottomLeftRadius="1dp" 
     android:bottomRightRadius="1dp" 
     android:topLeftRadius="1dp" 
     android:topRightRadius="1dp" /> 
</shape> 

Các đệm được xác định trong tình trạng này sẽ giúp đỡ trong việc cho padding để drawableleft hoặc phải ---------------------- Áp dụng hình dạng này trên EditView

<EditText 
      android:id="@+id/example" 
      android:layout_width="fill_parent" 
      android:layout_height="36dp" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:background="@drawable/shape2" 
      android:drawableLeft="@drawable/icon1" 
      android:drawablePadding="@dimen/txtDrwblPadding" 
      android:ems="10" 
     /> 

sử dụng hình dạng được xác định làm nền sẽ cung cấp cho EditText của bạn một số kiểu cộng với lề để drawableLeft.

+0

một giải pháp tốt, cảm ơn! –

24

Hãy resources.xml drawable của bạn

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true"> 
     <inset android:drawable="@drawable/small_m" android:insetLeft="10dp" android:insetTop="10dp" /> 
    </item> 
    <item> 
     <inset android:drawable="@drawable/small_p" android:insetLeft="10dp" android:insetTop="10dp" /> 
    </item> 
</selector> 
+0

Giải pháp tốt cho nó. –

+0

Cảm ơn bạn! Giải pháp này giúp tôi tiết kiệm rất nhiều thời gian. – emaleavil

+2

@ Nghệ sĩ tài năng nhất tôi đã sử dụng inset trong drawable và nó làm việc tốt cho các thiết bị phiên bản mới hơn. Tôi có nghĩa là nó không hoạt động trong SDK 16, 17 nhưng làm việc trong SDK 23. Có ý tưởng nào không? –

29

android:drawablePadding là cách dễ nhất để cung cấp cho padding để biểu tượng drawable nhưng bạn không thể đưa ra cụ thể đệm một bên như paddingRight hoặc paddingLeft của drawable icon.To đạt được điều đó bạn có đào sâu vào nó. Và nếu bạn áp dụng paddingLeft hoặc paddingRight đến Edittext thì nó sẽ đặt đệm vào toàn bộ Edittext cùng với biểu tượng có thể kéo.

2

Bạn có thể sử dụng android:drawableLeft="@drawable/your_icon" để đặt hình vẽ được hiển thị ở bên trái. Để thiết lập một padding cho drawable bạn nên sử dụng android:paddingLeft hoặc android:paddingRight để thiết lập padding trái/phải tương ứng.

android:paddingRight="10dp" 
android:paddingLeft="20dp" 
android:drawableRight="@drawable/ic_app_manager" 
2

Bạn có thể sử dụng một đệm cho các nút và bạn có thể chơi với drawablePadding

<Button 
    style="@style/botonesMenu" 
    android:padding="15dp" 
    android:drawablePadding="-15dp" 
    android:text="@string/actualizarBD" 
    android:textAlignment="gravity" 
    android:gravity="center" 
    android:layout_row="1" 
    android:layout_column="0" 
    android:drawableTop="@drawable/actualizar" 
    android:id="@+id/btnActualizar" 
    android:onClick="actualizarBD" /> 

bạn có thể sử dụng một đệm cụ thể phụ thuộc vào nơi đặt drawable của bạn, với android: paddingLeft = "10dp" hoặc android : paddingBottom = "10dp" hoặc android: paddingRight = "10dp" hoặc android: paddingTop = "10dp"

0

Nếu kích thước của resouce drawable là cố định, bạn có thể làm như thế này:

<Button 
    android:background="@drawable/rounded_button_green" 
    style="?android:attr/selectableItemBackground" 
    android:layout_height="wrap_content" 
    app:layout_widthPercent="70%" 
    android:drawableRight="@drawable/ic_clear_black_24dp" 
    android:paddingRight="10dp" 
    android:paddingLeft="34dp" 
    tools:text="example" /> 

Mấu chốt ở đây là:

android:drawableRight="@drawable/ic_clear_black_24dp" 
    android:paddingRight="10dp" 
    android:paddingLeft="34dp" 

Đó là, kích thước của nguồn drawable cộng paddingRight là paddingLeft.

You can see the result in this example

13

Có. sử dụng drawablePadding như sau,

<TextView 
     android:id="@+id/tvHeader" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Settings and Contents" 
     android:drawableLeft="@drawable/icon_success" 
     android:drawablePadding="10dp" /> 
3

Bạn nên xem xét sử dụng lớp-list

Tạo một file drawable như thế này, tên nó như ic_calendar.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle"> 
     <solid android:color="@android:color/transparent"/> 
    </shape> 
</item> 
<item android:right="10dp"> 
    <bitmap android:gravity="center_vertical|left" 
     android:src="@drawable/ic_calendar_16dp" 
     android:tint="@color/red" 
     /> 
</item> 
</layer-list> 

Dưới file layout,

<TextView 
     android:id="@+id/tvDate" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:drawableLeft="@drawable/ic_calendar" 
     android:textColor="@color/colorGrey" 
     android:textSize="14sp" 
    /> 
0
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null); 

addressTitleView.setCompoundDrawablePadding(); 
+0

Mặc dù đoạn mã này có thể giải quyết được câu hỏi, [bao gồm cả giải thích] (http://meta.stackexchange.com/questions/114762/explaining-entirely-‌ code-based-answers) thực sự giúp cải thiện chất lượng của bạn bài đăng. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. –

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