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. 당신이 적용하는 경우 그리고 paddingLeftpaddingRight에게 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사용 LinearLayoutImageViewTextView내부. 하위 항목에서 사용 ImageViewTextView사용 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.