Android - расстояние между CheckBox и текстом - PullRequest
238 голосов
/ 28 октября 2010

Существует ли простой способ добавить заполнение между флажком в элементе управления CheckBox и соответствующим текстом?

Я не могу просто добавить начальные пробелы, поскольку моя метка многострочная.

Как есть, текст слишком близко к флажку: alt text

Ответы [ 27 ]

0 голосов
/ 09 августа 2013

<CheckBox android:drawablePadding="16dip" - Заполнение между чертежами и текстом.

0 голосов
/ 22 апреля 2016

Я сталкиваюсь с этой проблемой, меняя изображения.Просто добавлен дополнительный прозрачный фон в png файлах.Это решение отлично работает на всех API.

0 голосов
/ 13 февраля 2014

Вам нужно получить размер изображения, которое вы используете, чтобы добавить ваш отступ к этому размеру. На внутренних устройствах Android они получают отрисовку, указанную вами в src, и впоследствии используют ее размер. Поскольку это закрытая переменная и нет получателей, вы не можете получить к ней доступ. Также вы не можете получить com.android.internal.R.styleable.CompoundButton и получить оттуда отрисовку.

Так что вам нужно создать свой собственный стиль (то есть custom_src) или вы можете добавить его непосредственно в вашу реализацию RadioButton:

public class CustomRadioButton extends RadioButton {

    private Drawable mButtonDrawable = null;

    public CustomRadioButton(Context context) {
        this(context, null);
    }

    public CustomRadioButton(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomRadioButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mButtonDrawable = context.getResources().getDrawable(R.drawable.rbtn_green);
        setButtonDrawable(mButtonDrawable);
    }

    @Override
    public int getCompoundPaddingLeft() {
        if (Util.getAPILevel() <= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            if (drawable != null) {
                paddingLeft += drawable.getIntrinsicWidth();
            }
        }
        return paddingLeft;
    }
}
0 голосов
/ 15 февраля 2014

Вместо того, чтобы настраивать текст для Checkbox, я сделал следующее, и это сработало для меня на всех устройствах. 1) В XML добавьте флажок и текстовое представление рядом друг с другом; сохраняя некоторое расстояние. 2) Установите размер текста флажка на 0sp. 3) Добавьте относительный текст в это текстовое поле рядом с флажком.

0 голосов
/ 28 августа 2014

Поскольку вы, вероятно, используете селектор рисования для своего свойства android:button, вам нужно добавить android:constantSize="true" и / или указать рисование по умолчанию, например:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:constantSize="true">
  <item android:drawable="@drawable/check_on" android:state_checked="true"/>
  <item android:drawable="@drawable/check_off"/>
</selector>

После этого вам нужно указать android:paddingLeft атрибут в вашем флажке xml.

Минусы:

В редакторе макета вы увидите текст, идущий под флажком с api 16 и ниже, в этом случае вы можетеисправьте это, создав свой собственный класс-флажок, такой как , предлагается , но для API уровня 16.

Обоснование:

это ошибка как StateListDrawable#getIntrinsicWidth()Вызов используется внутри CompoundButton, но может возвращать значение < 0, если нет текущего состояния и не используется постоянный размер.

0 голосов
/ 16 июня 2015

Изображение флажка перекрывалось, когда я использовал свои собственные элементы рисования из селектора, я решил эту проблему, используя следующий код:

CheckBox cb = new CheckBox(mActivity);
cb.setText("Hi");
cb.setButtonDrawable(R.drawable.check_box_selector);
cb.setChecked(true);
cb.setPadding(cb.getPaddingLeft(), padding, padding, padding);

Спасибо Алексею Семенюку

0 голосов
/ 11 мая 2015

Все, что вам нужно сделать, чтобы преодолеть эту проблему, это добавить android:singleLine="true" к checkBox в вашем xml-макете Android:

<CheckBox 
   android:id="@+id/your_check_box"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:singleLine="true"
   android:background="@android:color/transparent"
   android:text="@string/your_string"/>

и ничего особенного не будет добавлено программно.

...