android : drawableLeft 여백 및 / 또는 패딩


답변:


464

언급 한 바와 같이 android:drawablePadding버튼이 충분히 작 으면 텍스트와 드로어 블 사이에 패딩 만 강제합니다.

큰 버튼을 배치 할 때 및 버튼 android:drawablePadding과 함께 사용할 수 있습니다android: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" />  

21
android : paddingLeft = "30dip"android : paddingRight = "26dip"가 여기에 있습니다!
— IgorGanapolsky 님이

4
이것은 질문과 관련이 없지만 android : gravity = "center"는 텍스트를 드로어 블의 중심에 정렬시킵니다!
— cwhsu

1
왼쪽과 오른쪽에 드로어 블이 있고 오른쪽 드로어 블 만 조정하면 어떻게 되나요?
— nmxprime

나는 android : paddingLeft 만 사용하고 이미지의 위치를 ​​변경합니다. android : drawablePadding은 이미지와 텍스트 사이의 공간에 사용됩니다.
— 용감한

이 코드의 문제는 passwordToggleDrawable왼쪽 패딩 가능으로 만 특정 대상을 지정할 수 없기 때문에 왼쪽 패딩 간격이 더 커지는 것입니다.
— 과일

184

TextView에는 트릭을 수행 해야하는 android : drawablePadding 속성이 있습니다.

android : drawablePadding

드로어 블과 텍스트 사이의 패딩입니다.

"14.5sp"와 같은 단위가 추가 된 부동 소수점 숫자 인 차원 값이어야합니다. 사용 가능한 단위는 px (픽셀), dp (밀도 독립적 픽셀), sp (기본 글꼴 크기에 따라 크기가 조정 된 픽셀), (인치), mm (밀리미터)입니다.

이 유형의 값을 포함하는 자원 ( "@ [package :] type : name"형식) 또는 테마 속성 ( "? [package :] [type :] name"형식)에 대한 참조 일 수도 있습니다. .

이것은 전역 속성 자원 기호 drawablePadding에 해당합니다.


61

android:drawablePadding버튼이 2를 함께 뭉치기에 충분히 작은 경우에만 텍스트와 드로어 블 사이에 패딩 간격을 만듭니다. 버튼이 결합 된 너비 (drawableLeft / drawableRight의 경우) 또는 높이 (drawableTop / drawableBottom의 경우)보다 넓은 경우 drawablePadding은 아무 작업도 수행하지 않습니다.

지금도이 문제로 어려움을 겪고 있습니다. 내 버튼은 상당히 넓고 아이콘은 버튼의 왼쪽 가장자리에 매달려 있으며 텍스트는 가운데 중앙에 있습니다. 이 문제를 해결하는 유일한 방법은 포토샵으로 캔버스의 왼쪽 가장자리에 빈 픽셀을 추가하여 드로어 블에 여백을 굽는 것입니다. 이상적이지 않으며 실제로 권장되지 않습니다. 그러나 그것은 TextView / Button을 다시 작성하기에 부족한 지금의 스톱 갭 솔루션입니다.


내 문제를 설명해 주셔서 감사합니다. 버튼을 충분히 넓은 때 나는 단지 발생 실현되지 않은
— peter.bartos

나는 같은 문제를 가지고있다. 내 버튼을 그릴 수 가까이 텍스트로되지 않도록 넓은
— 밀라 드 Faridnia

예, 감사했습니다
— dave o grady

43

예. 다음과 같이 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" />

37

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

2
@ The Finest Artist 드로어 블에 인셋을 사용했으며 최신 버전의 기기에서는 제대로 작동합니다. SDK 16, 17에서는 작동하지 않지만 SDK 23에서는 작동합니다. 어떤 아이디어가 있습니까?
— Bhavin Chauhan


이에 대한 좋은 대답과 찬성. 오랫동안 혼란스러워하는 문제를 해결하도록 도와주십시오.
— Anthonyeef

34

android:drawablePadding당김 아이콘에 패딩을 제공하는 가장 쉬운 방법입니다하지만 당신은 같은 특정에게 한 쪽의 패딩을 줄 수 paddingRight또는 paddingLeft당김의 당신이 그것으로 발굴 할 필요가 있음을 달성 icon.To. 당신이 적용하는 경우 그리고 paddingLeft나 paddingRight에게 Edittext그것은 전체에 패딩을 배치합니다 Edittext당김 아이콘과 함께.


12

편집 텍스트의 모양을 정의하고 여백을 채 웁니다. 예를 들어

<?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에 부여합니다.


12

android : drawablePadding은 드로어 블 아이콘에 패딩을주는 가장 쉬운 방법이지만 드로어 블 아이콘의 paddingRight 또는 paddingLeft와 같은 특정 한쪽 패딩을 줄 수는 없습니다. 그리고 paddingLeft 또는 paddingRight를 Edittext에 적용하면 Drawable 아이콘과 함께 전체 Edittext에 패딩이 배치됩니다.

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

"dp"를 사용해야합니다
— Mark Pazon

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

참고 : layout_width는 wrap_content 여야하고 paddingLeft paddingRight drawablePadding을 사용하여 간격을 제어해야합니다. layout_width 값을 지정하면 아이콘과 텍스트 사이에 간격이 생깁니다. layout_width에 지정 값을 지정하면 패딩이 측정됩니다.


9

나는 대답을 반지에 던질 것이다. 프로그래밍 방식으로이 작업을 수행하려면 다음을 수행하십시오.

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);

이렇게하면 휴대 전화가 LTR 또는 RTL인지에 따라 끝이 왼쪽 / 오른쪽을 의미하는 드로어 블 끝에 패딩이 추가됩니다.


7

대신의 Button사용 LinearLayout과 ImageView및 TextView내부. 하위 항목에서 사용 ImageView및 TextView사용 android:duplicateParentState="true".


Button UI를 재생하고 onclicklistener ()를 버튼 부분으로 전송하려면 실제로 FrameLayout과 Button (및 자체 LinearLayout 내의 ImageView / TextView)이 필요합니다.
— 3c71

1
TextView에 drawablePadding이 이미있는 경우 추가 레이아웃을 사용하는 이유는 무엇입니까?
— Parinda Rajapaksha

5

레이어리스트 사용을 고려해야합니다

이와 같은 드로어 블 파일을 작성하고 이름을 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" 
    />

4

버튼에 패딩을 사용할 수 있으며 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"를 사용하여 드로어 블을 놓는 위치에 따라 특정 패딩을 사용할 수 있습니다.


2

android:drawableLeft="@drawable/your_icon"드로어 블이 왼쪽에 표시되도록 설정할 수 있습니다 . 드로어 블의 패딩을 설정하려면 android:paddingLeft또는 android:paddingRight을 사용하여 왼쪽 / 오른쪽 패딩을 각각 설정 해야합니다 .

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

1

drawable resouce의 크기가 고정되어 있으면 다음과 같이 할 수 있습니다.

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

즉, drawable 리소스와 paddingRight의 크기는 paddingLeft입니다.

이 예제에서 결과를 볼 수 있습니다


1
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null);

addressTitleView.setCompoundDrawablePadding();

이 코드 스 니펫은 문제를 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자에게 질문에 대한 답변을 제공하고 있으며 해당 사람들이 귀하의 코드 제안 이유를 모를 수도 있습니다.
— Rosário Pereira Fernandes

이것은 예를 들어 drwables를 시작 / 종료로 설정할 수있는 버튼이 아닌 텍스트보기에서만 작동합니다
— Ixx

1

그냥 리메이크하십시오 :

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

에

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.