Câu trả lời:
Như cephus đã đề cập android:drawablePadding
sẽ chỉ buộc đệm giữa văn bản và drawable nếu nút đủ nhỏ.
Khi bố trí các nút lớn hơn, bạn có thể sử dụng android:drawablePadding
kết hợp với android:paddingLeft
và android:paddingRight
để buộc văn bản và có thể vẽ vào bên trong về phía giữa của nút. Bằng cách điều chỉnh riêng phần đệm bên trái và bên phải, bạn có thể điều chỉnh rất chi tiết cho bố cục.
Đây là một nút ví dụ sử dụng phần đệm để đẩy văn bản và biểu tượng gần nhau hơn so với 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" />
passwordToggleDrawable
khoảng cách đệm bên trái trở nên lớn hơn vì nó không thể chỉ nhắm mục tiêu cụ thể vào bên trái.
TextView có một thuộc tính android: drawablePadding nên thực hiện thủ thuật:
android: drawablePadding
Phần đệm giữa các drawable và văn bản.
Phải là giá trị thứ nguyên, là số dấu phẩy động được gắn với một đơn vị, chẳng hạn như "14,5sp". Các đơn vị khả dụng là: px (pixel), dp (pixel độc lập với 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), mm (milimet).
Đây cũng có thể là một tham chiếu đến một tài nguyên (ở dạng "@ [gói:] type: name") hoặc thuộc tính theme (ở dạng "? [Gói:] [type:] name") chứa giá trị của 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 toàn cầu drawablePadding.
android:drawablePadding
sẽ chỉ tạo một khoảng cách đệm giữa văn bản và có thể vẽ được nếu nút đủ nhỏ để ghép 2 cái 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 height (đối với drawableTop / drawableBottom) thì drawablePadding sẽ không làm gì cả.
Tôi đang vật lộn với điều này ngay bây giờ là tốt. Các nút của tôi khá rộng và biểu tượng được treo ở cạnh trái của nút và văn bản được đặt ở giữa. Cách duy nhất của tôi để giải quyết vấn đề này bây giờ là nướng trong lề trên có thể vẽ bằng cách thêm các pixel trống vào cạnh trái của khung vẽ bằng photoshop. Không lý tưởng, và cũng không thực sự được đề nghị. Nhưng đó là giải pháp ngăn chặn của tôi bây giờ, không xây dựng lại TextView / Nút.
Đúng. 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" />
Tạo tài nguyên có thể vẽ 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>
android:drawablePadding
là cách dễ nhất để cung cấp phần đệm cho biểu tượng có thể vẽ được nhưng Bạn không thể cung cấp phần đệm cụ thể như paddingRight
hoặc biểu tượng có thể paddingLeft
vẽ được. Để đạt được điều đó bạn phải đào sâu vào nó. Và Nếu bạn áp dụng paddingLeft
hoặc paddingRight
để Edittext
sau đó nó sẽ đặt đệm cho toàn bộ Edittext
cùng với biểu tượng drawable.
xác định hình dạng cho edittext của bạn và cung cấp cho nó một 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>
Phần đệm được xác định trong hình này sẽ giúp tạo phần đệm cho drawableeleft 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ề cho drawableLeft.
android: drawablePadding là cách dễ nhất để cung cấp phần đệm cho biểu tượng có thể vẽ được nhưng bạn không thể cung cấp phần đệm cụ thể như paddingRight hoặc phần đệm Biểu tượng có thể vẽ được. Để đạt được điều đó, bạn phải tìm hiểu kỹ về nó. Và nếu bạn áp dụng paddingLeft hoặc paddingRight cho Edittext thì nó sẽ đặt padding vào toàn bộ Edittext cùng với biểu tượng drawable.
<TextView android:layout_width="match_parent"
android:padding="5sp"
android:id="@+id/date"
android:gravity="center|start"
android:drawableEnd="@drawable/ic_calendar"
android:background="@drawable/edit_background"
android:hint="Not Selected"
android:drawablePadding="10sp"
android:paddingStart="10sp"
android:paddingEnd="10sp"
android:textColor="@color/black"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="32dp"
android:background="@drawable/a"
android:drawableLeft="@drawable/concern_black"
android:gravity="center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:drawablePadding="10dp"
android:text="text"/>
lưu ý: layout_creen cần phải được quấn_content và sử dụng paddingLeft paddingRight drawablePadding để kiểm soát khoảng cách. Nếu bạn chỉ định giá trị layout_ thong sẽ có khoảng cách giữa biểu tượng và văn bản, tôi nghĩ rằng một khi cung cấp cho layout_creen một giá trị chỉ định, phần đệm sẽ đo.
Tôi cũng sẽ ném câu trả lời của mình vào vòng. Nếu bạn muốn làm điều này theo chương trình, bạn có thể làm như sau.
final Drawable drawable = ContextCompat.getDrawable(getContext(), R.drawable.somedrawable);
final boolean isLTR = ViewCompat.LAYOUT_DIRECTION_LTR == ViewCompat.getLayoutDirection(this);
final int iconInsetPadding = getResources().getDimensionPixelSize(R.dimen.icon_padding);
final Drawable insetDrawable = new InsetDrawable(drawable, isLTR ? 0 : iconInsetPadding, 0, isLTR ? iconInsetPadding : 0, 0);
Điều này sẽ thêm phần đệm vào phần cuối của drawable trong đó phần cuối sẽ có nghĩa là trái / phải tùy thuộc vào việc điện thoại nằm trong LTR hay RTL.
Thay vì Button
sử dụng LinearLayout
với ImageView
và TextView
bên trong. Trong các mặt hàng trẻ em thích ImageView
và TextView
sử dụng android:duplicateParentState="true"
.
Bạn nên xem xét sử dụng danh sách lớp
Tạo một tệp có thể vẽ được như thế này, đặt tên là ic_calWiki.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>
Theo tập tin bố trí,
<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"
/>
Bạn có thể sử dụng phần đệm cho 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 phần đệm cụ thể tùy thuộc vào vị trí có thể vẽ của bạn, với android: paddingLeft = "10dp" hoặc android: paddingBottom = "10dp" hoặc android: paddingRight = "10dp" hoặc android: paddingTop = "10dp"
Bạn có thể sử dụng android:drawableLeft="@drawable/your_icon"
để đặt drawable được hiển thị ở phía bên trái. Để đặt phần đệm cho phần có thể vẽ, bạn nên sử dụng android:paddingLeft
hoặc android:paddingRight
để đặt phần đệm bên trái / bên phải.
android:paddingRight="10dp"
android:paddingLeft="20dp"
android:drawableRight="@drawable/ic_app_manager"
Nếu kích thước của resouce có thể rút được 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" />
Chìa khóa ở đây là:
android:drawableRight="@drawable/ic_clear_black_24dp"
android:paddingRight="10dp"
android:paddingLeft="34dp"
Đó là, kích thước của tài nguyên có thể rút được cộng với paddingRight là paddingLeft.
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null);
addressTitleView.setCompoundDrawablePadding();
chỉ cần làm lại từ:
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="40dp"/>
<solid android:color="@android:color/white"/>
</shape>
đến
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:right="@dimen/_2dp"
android:left="@dimen/_2dp"
android:bottom="@dimen/_2dp"
android:top="@dimen/_2dp"
>
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="40dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
</layer-list>
Thử sử dụng phần đệm âm
Giống:
android:paddingLeft="-8dp"