Вид кнопки с drawableLeft - PullRequest
0 голосов
/ 01 мая 2011

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

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

Ответы [ 3 ]

3 голосов
/ 01 мая 2011

Кажется, что x-позиция drawableLeft зависит от заполнения слева и позиции x-scroll: source .Так что это заведомо поведение.Я думаю, что вам лучше использовать классы 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 голос
/ 01 апреля 2017

У меня была эта проблема только сейчас, но я обнаружил, что вам просто нужно установить 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" />`
1 голос
/ 23 июля 2013

Просто установите 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" />
...