[android] 아이콘과 텍스트가있는 Android 버튼

내 앱에 다음과 같은 버튼이 있습니다.

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


답변

재료 구성 요소 라이브러리 및 구성 요소를 사용할 수 있습니다 MaterialButton. 및
사용app:iconapp:iconGravity="start" 속성을 .

다음과 같은 것 :

  <com.google.android.material.button.MaterialButton
        style="@style/Widget.MaterialComponents.Button.Icon"
        app:icon="@drawable/..."
        app:iconGravity="start"
        ../>

여기에 이미지 설명 입력


답변

재정의하지 않고 android.widget.Button을 사용하는 경우 @Liem Vo의 대답이 정확합니다. MaterialComponents를 사용하여 테마를 재정의하는 경우 문제가 해결되지 않습니다.

그래서 만약 당신이

  1. com.google.android.material.button.MaterialButton 사용 또는
  2. 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" />


답변