내 앱에 다음과 같은 버튼이 있습니다.
<Button
android:id="@+id/bSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="Search"
android:textSize="24sp" />
텍스트와 아이콘이있는 동일한 버튼을 만들려고합니다. android : drawableLeft가 나를 위해 작동하지 않습니다 (아마도 작동하지만 아이콘에 최대 높이를 설정하는 방법을 모르겠습니다).
그래서 ImageView와 TextView로 LinearLayout을 만들고 버튼처럼 작동하도록 만들었습니다.
<LinearLayout
android:id="@+id/bSearch2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/btn_default"
android:clickable="true"
android:padding="16dp"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:adjustViewBounds="true"
android:maxHeight="30dp"
android:maxWidth="30dp"
android:scaleType="fitCenter"
android:src="@drawable/search_icon" />
<TextView
android:id="@+id/tvSearchCaption"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="24sp"
android:paddingRight="30dp"
android:gravity="center"
android:text="Search" />
</LinearLayout>
내 새 버튼은 정확히 내가 원하는 것입니다 (글꼴 크기, 아이콘 및 텍스트 배치). 하지만 내 기본 버튼처럼 보이지 않습니다.
그래서 새 버튼의 배경과 텍스트 색상을 변경하려고했습니다.
Button Search = (Button) findViewById(R.id.bSearch);
LinearLayout bSearch2 = (LinearLayout) findViewById(R.id.bSearch2);
bSearch2.setBackground(bSearch.getBackground());
TextView tvSearchCaption = (TextView)findViewById(R.id.tvSearchCaption);
tvSearchCaption.setTextColor(bSearch.getTextColors().getDefaultColor());
이것은 이상한 결과, 내 이전 버튼이 엉망이됩니다.
XML에서이 두 버튼의 순서를 변경하여 “새 버튼”이 먼저 표시되면 또 다른 이상한 결과가 나타납니다.
이제 이전 버튼을 누르려고하면 새 버튼이 눌리는 것을 알았습니다.
어떤 아이디어?
답변
이걸로 해봐.
<Button
android:id="@+id/bSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="Search"
android:drawableLeft="@android:drawable/ic_menu_search"
android:textSize="24sp"/>
답변
이미지를 왼쪽, 오른쪽, 위쪽 또는 아래쪽에 추가하려면 다음과 같은 속성을 사용할 수 있습니다.
android:drawableLeft
android:drawableRight
android:drawableTop
android:drawableBottom
샘플 코드는 위에 나와 있습니다. 상대 레이아웃을 사용하여이 작업을 수행 할 수도 있습니다.
답변
이 작업을 동적으로 수행하려는 사람에게는 setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)
버튼 개체가 도움이 될 것입니다.
견본
Button search = (Button) findViewById(R.id.yoursearchbutton);
search.setCompoundDrawables('your_drawable',null,null,null);
답변
이것이 당신이 정말로 원하는 것입니다.
<Button
android:id="@+id/settings"
android:layout_width="190dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@color/colorAccent"
android:drawableStart="@drawable/ic_settings_black_24dp"
android:paddingStart="40dp"
android:paddingEnd="40dp"
android:text="settings"
android:textColor="#FFF" />
답변
답변
재정의하지 않고 android.widget.Button을 사용하는 경우 @Liem Vo의 대답이 정확합니다. MaterialComponents를 사용하여 테마를 재정의하는 경우 문제가 해결되지 않습니다.
그래서 만약 당신이
- com.google.android.material.button.MaterialButton 사용 또는
- MaterialComponents를 사용하여 AppTheme 재정의
app : icon 매개 변수를 사용 합니다 .
<Button
android:id="@+id/bSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="Search"
android:textSize="24sp"
app:icon="@android:drawable/ic_menu_search" />