2010-07-26 155 views

回答

144

的TextView有一個android:drawablePadding財產應該做的伎倆:

安卓drawablePadding

的可繪製和文本之間的填充。

必須是一個尺寸值,這是一個浮點數,附加了一個單位(例如「14.5sp」)的 。可用單位爲:px(像素),dp (與濃度無關的像素),sp(基於首選 字體大小的縮放像素),單位爲英寸,毫米(毫米)。

這也可能是對資源的引用(形式爲 「@ [package:] type:name」)或主題屬性(形式爲 「?[package:] [type:] name」)包含這種類型的值。

這對應於全局屬性資源符號 drawablePadding。

49

android:drawablePadding只會在文本和drawable之間創建一個填充間隙,如果按鈕足夠小,可以將它們壓扁在一起。如果你的按鈕寬於組合寬度(對於drawableLeft/drawableRight)或高度(對於drawableTop/drawableBottom),那麼drawablePadding不會做任何事情。

我現在也在爲此苦苦掙扎。我的按鈕很寬,圖標掛在按鈕的左邊,文本居中居中。我現在唯一的解決方法是通過使用photoshop在畫布的左邊緣添加空白像素來繪製可繪製邊緣。不理想,也沒有真正推薦。但那是我現在的缺口解決方案,很少重建TextView/Button。

+0

感謝解釋我的問題。我沒有意識到,它只是當按鈕足夠寬時造成的 – 2011-09-11 13:18:29

368

由於cephus提到android:drawablePadding只會強制文本和drawable之間的填充,如果按鈕足夠小。

當佈置較大的按鈕時,您可以使用android:drawablePaddingandroid:paddingLeftandroid:paddingRight一起強制文本並向內朝向按鈕的中心。通過分別調整左側和右側填充,可以對佈局進行非常詳細的調整。

下面是一個使用填充,以推動文本和圖標的例子按鈕間距小於他們將默認爲:

<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」是關鍵! – 2011-11-21 18:05:58

+2

這與問題無關,但android:gravity =「center」將使文本與繪圖中心保持一致! – cwhsu 2014-03-02 01:32:56

+0

如果我們在左側和右側都繪製了drawable,只需要調整right drawable? – nmxprime 2014-06-24 13:27:35

6

而是按鈕的使用的LinearLayout用的ImageView和TextView的內部。在像ImageView和TextView這樣的子項中,使用android:duplicateParentState =「true」。

+0

實際上您需要一個FrameLayout和一個Button(以及它們自己的LinearLayout中的ImageView/TextView)來重現按鈕UI並將onclicklistener()傳送到按鈕部分 – 3c71 2014-03-21 19:14:54

+0

爲什麼使用額外的佈局(如果在TextView中已經有drawablePadding)。 – 2017-08-10 10:37:57

-3

試圖使用負填充

喜歡:

android:paddingLeft="-8dp" 
11

限定一種形狀爲您的EditText並給它填充 對於實施例

<?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> 

在這種形狀中定義的填充將幫助給填充繪製左鍵或右鍵 ----------------------在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" 
     /> 

使用該定義的形狀作爲背景將給您的EditText一些樣式加邊距drawableLeft。

+0

其很好的解決方案,謝謝! – 2015-02-10 13:59:58

24

讓您繪製resources.xml中

<?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

它的好解決方案。 – 2015-09-12 18:12:35

+0

謝謝你的傢伙!這個解決方案讓我花了很多時間。 – emaleavil 2015-11-04 13:54:12

+2

@最好的藝術家我用drawable插入它,並且對於較新版本的設備工作正常。我的意思是它不在SDK 16,17中工作,但在SDK 23中工作。有什麼想法嗎? – 2016-03-11 12:09:07

29

android:drawablePadding是給填充到繪製圖標的最簡單的方法,但你不能給出具體的一面填充像paddingRight或繪製icon.To的paddingLeft實現,你有挖掘它。 並且如果您將paddingLeftpaddingRight應用於Edittext,則它將填充整個Edittext以及可繪製圖標。

2

您可以使用android:drawableLeft="@drawable/your_icon"來設置要顯示在左側的繪圖。爲了爲drawable設置填充,您應該使用android:paddingLeftandroid:paddingRight分別設置左/右填充。

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

您可以使用填充的按鈕,你可以用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" /> 

您可以使用特定的填充取決於在那裏把你的繪製,採用Android:paddingLeft =「10dp」或Android :paddingBottom來= 「10dp」 或Android:paddingRight = 「10dp」 或Android:paddingTop = 「10dp」

0

如果繪製種源的大小是固定的,你可以這樣做:

<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" /> 

這裏的關鍵是:

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

也就是說,繪製資源加上paddingRight的大小是paddingLeft。

You can see the result in this example

13

是的。使用drawablePadding如下,

<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

您應該考慮使用層列表

創建這樣的繪製文件,並將它命名爲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> 

在佈局文件,

<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

雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code- based-answers)確實有助於提高您的質量帖子。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – 2018-03-03 22:15:52

相關問題