Вид кнопки с drawableLeft

#android #button #drawable

#Android #кнопка #можно рисовать

Вопрос:

Мне нужно добавить drawable к моей кнопке и добавил drawableLeft к ней. Если для ширины кнопки установлено значение wrap_content, то все в порядке и выглядит хорошо. Но если я установлю пользовательскую ширину для своей кнопки, то изображение drawableLeft исчезнет из заголовка кнопки до левого края кнопки. Это какая-то ошибка дизайна в Android? Как я могу исправить это, чтобы кнопка выглядела одинаково на пользовательской ширине?

С уважением, evilone

Ответ №1:

Кажется, что x-позиция drawableLeft зависит от левого отступа и x-позиции прокрутки: источник. Так что это поведение по дизайну. Я думаю, вам лучше использовать классы SpannableString и ImageSpan для отображения изображения слева от текста кнопки:

 final SpannableStringBuilder builder = new SpannableStringBuilder("uFFFC");
builder.setSpan(new ImageSpan(getResources.getDrawable(R.drawable.your_drawable)),
    0, builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(getString(R.string.your_string));
textView.setText(builder);
  

Кроме того, вы можете использовать Html.fromHtml() метод для сборки Spannable из HTML. Но в этом случае вам нужно реализовать Html.ImageGetter интерфейс для загрузки изображений из ресурсов.

РЕДАКТИРОВАТЬ: Есть способ создать виджет, похожий на кнопку, используя только XML:

 <LinearLayout
  android:layout_width="200dip"
  android:layout_height="wrap_content"
  android:gravity="center"
  android:clickable="true"
  android:focusable="true"
  android:background="@android:drawable/btn_default">

  <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:duplicateParentState="true"
    android:src="@drawable/button_icon"/>
  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:duplicateParentState="true"
    android:text="@string/button_text"/>
</LinearLayout>
  

Комментарии:

1. Я добавил некоторую информацию к ответу.

2. могу ли я как-то это сделать в моем design XML?

3. Я не знаю никакого способа сделать это в XML. Но я добавил фрагмент кода, который поможет вам сделать аналогичную вещь, используя XML.

Ответ №2:

Просто установите android:gravity="center_vertical" для вашей кнопки атрибуты.

     <Button
        android:id="@ id/button_id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawableLeft="@drawable/ic_btn_icon"
        android:drawablePadding="5dp"
        android:text="Button"
        android:gravity="center_vertical" />
  

Ответ №3:

У меня была эта проблема прямо сейчас, но я обнаружил, что вам просто нужно установить android: padding для кнопки. Таким образом, вы отодвигаете изображение от левой стороны кнопки. Проверьте этот код:

 `<Button
        android:id="@ id/button1"
        android:layout_width="170dp"
        android:layout_height="50dp"
        android:layout_below="@ id/txt1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="12dp"
        android:background="@drawable/button"
        android:drawableLeft="@drawable/icon"
        android:drawablePadding="20dp"
        android:minHeight="40dp"
        android:onClick="onClick"
        android:padding="40dp"
        android:text="@string/string1"
        android:textSize="16sp" />`