답변:
언급 한 바와 같이 android:drawablePadding
버튼이 충분히 작 으면 텍스트와 드로어 블 사이에 패딩 만 강제합니다.
큰 버튼을 배치 할 때 및 버튼 android:drawablePadding
과 함께 사용할 수 있습니다android:paddingLeft
android: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" />
passwordToggleDrawable
왼쪽 패딩 가능으로 만 특정 대상을 지정할 수 없기 때문에 왼쪽 패딩 간격이 더 커지는 것입니다.
TextView에는 트릭을 수행 해야하는 android : drawablePadding 속성이 있습니다.
android : drawablePadding
드로어 블과 텍스트 사이의 패딩입니다.
"14.5sp"와 같은 단위가 추가 된 부동 소수점 숫자 인 차원 값이어야합니다. 사용 가능한 단위는 px (픽셀), dp (밀도 독립적 픽셀), sp (기본 글꼴 크기에 따라 크기가 조정 된 픽셀), (인치), mm (밀리미터)입니다.
이 유형의 값을 포함하는 자원 ( "@ [package :] type : name"형식) 또는 테마 속성 ( "? [package :] [type :] name"형식)에 대한 참조 일 수도 있습니다. .
이것은 전역 속성 자원 기호 drawablePadding에 해당합니다.
android:drawablePadding
버튼이 2를 함께 뭉치기에 충분히 작은 경우에만 텍스트와 드로어 블 사이에 패딩 간격을 만듭니다. 버튼이 결합 된 너비 (drawableLeft / drawableRight의 경우) 또는 높이 (drawableTop / drawableBottom의 경우)보다 넓은 경우 drawablePadding은 아무 작업도 수행하지 않습니다.
지금도이 문제로 어려움을 겪고 있습니다. 내 버튼은 상당히 넓고 아이콘은 버튼의 왼쪽 가장자리에 매달려 있으며 텍스트는 가운데 중앙에 있습니다. 이 문제를 해결하는 유일한 방법은 포토샵으로 캔버스의 왼쪽 가장자리에 빈 픽셀을 추가하여 드로어 블에 여백을 굽는 것입니다. 이상적이지 않으며 실제로 권장되지 않습니다. 그러나 그것은 TextView / Button을 다시 작성하기에 부족한 지금의 스톱 갭 솔루션입니다.
예. 다음과 같이 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" />
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>
android:drawablePadding
당김 아이콘에 패딩을 제공하는 가장 쉬운 방법입니다하지만 당신은 같은 특정에게 한 쪽의 패딩을 줄 수 paddingRight
또는 paddingLeft
당김의 당신이 그것으로 발굴 할 필요가 있음을 달성 icon.To. 당신이 적용하는 경우 그리고 paddingLeft
나 paddingRight
에게 Edittext
그것은 전체에 패딩을 배치합니다 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에 부여합니다.
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"/>
<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에 지정 값을 지정하면 패딩이 측정됩니다.
나는 대답을 반지에 던질 것이다. 프로그래밍 방식으로이 작업을 수행하려면 다음을 수행하십시오.
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인지에 따라 끝이 왼쪽 / 오른쪽을 의미하는 드로어 블 끝에 패딩이 추가됩니다.
대신의 Button
사용 LinearLayout
과 ImageView
및 TextView
내부. 하위 항목에서 사용 ImageView
및 TextView
사용 android:duplicateParentState="true"
.
레이어리스트 사용을 고려해야합니다
이와 같은 드로어 블 파일을 작성하고 이름을 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"
/>
버튼에 패딩을 사용할 수 있으며 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"를 사용하여 드로어 블을 놓는 위치에 따라 특정 패딩을 사용할 수 있습니다.
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입니다.
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null);
addressTitleView.setCompoundDrawablePadding();
그냥 리메이크하십시오 :
<?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>