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