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

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

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

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

Ответы [ 27 ]

9 голосов
/ 12 сентября 2011

Я не знаю, ребята, но я проверял

<CheckBox android:paddingLeft="8mm" и перемещает только текст вправо, а не весь элемент управления.

Это меня вполне устраивает.

6 голосов
/ 14 октября 2013

Я только что закончил на этом:

Переопределите CheckBox и добавьте этот метод, если у вас есть настраиваемое рисование:

@Override
public int getCompoundPaddingLeft() {

    // Workarround for version codes < Jelly bean 4.2
    // The system does not apply the same padding. Explantion:
    // /2974904/android-rasstoyanie-mezhdu-checkbox-i-tekstom#2974927

    int compoundPaddingLeft = super.getCompoundPaddingLeft();

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Drawable drawable = getResources().getDrawable( YOUR CUSTOM DRAWABLE );
        return compoundPaddingLeft + (drawable != null ? drawable.getIntrinsicWidth() : 0);
    } else {
        return compoundPaddingLeft;
    }

}

или это, если вы используете систему рисования:

@Override
public int getCompoundPaddingLeft() {

    // Workarround for version codes < Jelly bean 4.2
    // The system does not apply the same padding. Explantion:
    // /2974904/android-rasstoyanie-mezhdu-checkbox-i-tekstom#2974927

    int compoundPaddingLeft = super.getCompoundPaddingLeft();

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
        final float scale = this.getResources().getDisplayMetrics().density;
        return compoundPaddingLeft + (drawable != null ? (int)(10.0f * scale + 0.5f) : 0);
    } else {
        return compoundPaddingLeft;
    }

}

Спасибо за ответ:)

4 голосов
/ 13 января 2013

Это поведение изменилось в Jelly Bean. Трюк paddingLeft добавляет дополнительные отступы, делая текст слишком правым. Кто-нибудь еще заметил это?

2 голосов
/ 22 декабря 2015

требуется только один параметр в XML-файле

android:paddingLeft="20dp"
2 голосов
/ 28 октября 2010
<CheckBox
        android:paddingRight="12dip" />
2 голосов
/ 24 января 2013

Если у вас есть пользовательский селектор изображений для флажка или радиокнопки, вы должны установить такую ​​же кнопку и свойство фона, как это:

            <CheckBox
                android:id="@+id/filter_checkbox_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:button="@drawable/selector_checkbox_filter"
                android:background="@drawable/selector_checkbox_filter" />

Вы можете контролировать размер поля флажка или переключателя с помощью свойства background.

1 голос
/ 26 октября 2011

Если вы создаете пользовательские кнопки, например, см. изменить внешний вид учебника по флажкам

Затем просто увеличьте ширину btn_check_label_background.9.png, добавив еще один или два столбца прозрачных пикселейв центре изображения;оставьте маркеры с 9 патчами как есть.

1 голос
/ 16 июля 2016

У меня была такая же проблема с Galaxy S3 mini (android 4.1.2), и я просто сделал свой собственный флажок расширением AppCompatCheckBox вместо CheckBox. Теперь работает отлично.

1 голос
/ 05 апреля 2014

То, что я сделал, имеет TextView и CheckBox внутри (Относительный) Layout.TextView отображает текст, который я хочу видеть пользователю, а CheckBox не имеет никакого текста.Таким образом, я могу установить положение / отступ для CheckBox, где я хочу.

0 голосов
/ 24 мая 2016

Возможно, уже поздно, но я создал служебные методы для решения этой проблемы.

Просто добавьте эти методы в ваши утилиты:

public static void setCheckBoxOffset(@NonNull  CheckBox checkBox, @DimenRes int offsetRes) {
    float offset = checkBox.getResources().getDimension(offsetRes);
    setCheckBoxOffsetPx(checkBox, offset);
}

public static void setCheckBoxOffsetPx(@NonNull CheckBox checkBox, float offsetInPx) {
    int leftPadding;
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) {
        leftPadding = checkBox.getPaddingLeft() + (int) (offsetInPx + 0.5f);
    } else {
        leftPadding = (int) (offsetInPx + 0.5f);
    }
    checkBox.setPadding(leftPadding,
            checkBox.getPaddingTop(),
            checkBox.getPaddingRight(),
            checkBox.getPaddingBottom());
}

И используйте вот так:

    ViewUtils.setCheckBoxOffset(mAgreeTerms, R.dimen.space_medium);

или как это:

    // Be careful with this usage, because it sets padding in pixels, not in dp!
    ViewUtils.setCheckBoxOffsetPx(mAgreeTerms, 100f);
...