- CheckBox (Флажок)
- Отслеживаем смену состояния флажка
- Собственные стили
- Собственный вид
- AnimatedStateListDrawable. Анимация между переключением состояния
- res/drawable/toggle.xml
- res/drawable/toggle_checked.xml
- res/drawable/toggle_unchecked.xml
- res/drawable-v21/toggle.xml
- res/drawable-v21/toggle_unchecked_checked.xml
- res/drawable-v21/toggle_checked_unchecked.xml
- CheckBox
- Android — расстояние между CheckBox и текстом
- Как использовать CheckBox в Android
- Android — Интервал между CheckBox и текстом
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Ответ 17
- Ответ 18
- Ответ 19
- Ответ 20
- Ответ 21
- Ответ 22
- Ответ 23
- Ответ 24
- Ответ 25
- Ответ 26
CheckBox (Флажок)
Компонент CheckBox является флажком, с помощью которого пользователь может отметить (поставить галочку) определённую опцию. Очень часто флажки используются в настройках, когда нужно выборочно выбрать определённые пункты, необходимые для комфортной работы пользователю.
Компонент находится в группе Buttons.
Для управления состояниями флажка используйте методы setChecked() или togglе(). Чтобы узнать текущее состояние флажка, вызовите свойство isChecked.
Для экспериментов воспользуемся программой «Счетчик ворон», которую писали при изучении щелчка кнопки.
Как вы помните, в программе была кнопка и текстовое поле. Добавим ещё два элемента CheckBox, а также четыре текстовые метки TextView. Нам нужно постараться, чтобы элементы были аккуратно сгруппированы. Для этой цели воспользуемся вложенными компоновками LinearLayout. Заодно применим интересный приём — мы не будем использовать текст у флажков CheckBox, а воспользуемся текстовыми метками с разными размерами шрифтов. Верхняя метка с крупным шрифтом будет указывать на основную функциональность флажка, а нижняя метка с мелким шрифтом будет использоваться в качестве своеобразной подсказки, в которой содержится дополнительная информация для пользователя.
На самом деле вы можете попробовать другие способы разметки, не воспринимайте как догму. А мы идём дальше. Флажки в нашем приложении нужны для того, чтобы пользователь мог менять вывод текста в текстовом поле. По желанию, можно выводить текст красным цветом и жирным стилем по отдельности или в совокупности. Для этого нам нужно добавить дополнительные строчки кода в обработчик щелчка кнопки.
Запустите проект и попробуйте снимать и ставить галочки у флажков в разных комбинациях, чтобы увидеть, как меняется текст после щелчка кнопки. Код очень простой — проверяется свойство isChecked. Если галочка у флажка установлена, то свойство возвращает true и мы меняем цвет (красный) или стиль текста (жирный). Если флажок не отмечен, то свойство возвращает false, и мы используем стандартные настройки текста.
Отслеживаем смену состояния флажка
С помощью слушателя-интерфейса OnCheckedChangeListener с его методом onCheckedChanged() можно отслеживать смену состояния флажка.
Собственные стили
Если вы используете стандартный проект, то флажок будет использовать цвета Material Design, в частности цвет colorAccent для фона флажка.
В файле res/values/styles.xml добавим строки:
Свойство colorControlNormal отвечает за прямоугольник в невыбранном состоянии, а colorControlActivated за закрашенный прямоугольник в выбранном состоянии.
Присваиваем созданный стиль атрибуту android:theme:
Теперь цвета флажков изменились.
Собственный вид
Если вас не устраивает стандартный вид элементов CheckBox, то не составит никакого труда реализовать свои представления о дизайне.
В папке res/drawable создаём файл checkbox_selector.xml:
Также необходимо подготовить два изображения для двух состояний флажков — выбран и не выбран. В нашем случае это две звезды — серая и жёлтая.
Осталось прописать селектор в компоненте CheckBox (атрибут android:button):
Готово! Можете запускать проект и проверять работу флажков. Ниже код для реагирования на смену состояния флажков:
AnimatedStateListDrawable. Анимация между переключением состояния
Когда мы создали собственный вид флажка, то переключение происходит сразу без анимации. В API 21 появилась возможность установить анимацию при помощи нового класса AnimatedStateListDrawable.
Создадим как прежде файл для собственного вида флажка.
res/drawable/toggle.xml
Далее нужные два значка. Они сделаны в векторном виде.
res/drawable/toggle_checked.xml
res/drawable/toggle_unchecked.xml
Присвоим созданный вид атрибуту android:button.
Код будет работать на устройствах, которые поддерживают векторную графику (API 14), но анимации не будет. Для анимации создадим альтернативный вариант файла в папке res/drawable-v21.
AnimatedStateListDrawable похож на обычный StateListDrawable, но позволяет указать анимацию перехода между двумя состояниями. Мы также указываем две картинки, но также добавляем элементы transition.
res/drawable-v21/toggle.xml
res/drawable-v21/toggle_unchecked_checked.xml
res/drawable-v21/toggle_checked_unchecked.xml
Если запустить пример на старом устройстве, то никакой анимации не увидим, но код будет работать без ошибок. На новых устройствах анимация будет работать.
Источник
CheckBox
CheckBox это специфичная кнопка, имеющая два состояния (отмечена или не отмечена), которая представляет собой флажок, позволяющий пользователю выбирать один или несколько параметров в наборе.
Флажки удобно использовать, например, в настройках приложения, чтобы отмечать нужные функции, либо в списках, где необходимо выбрать сразу несколько элементов.
Чтобы добавить CheckBox в приложение, достаточно разместить следующий код:
Если одного флажка мало, вы можете добавить несколько.
С помощью атрибута android:text вы можете задать текст, который будет пояснять, какое действие произойдёт при активации флажка. Также текст можно задать программно с помощью метода setText(). Получить текст можно с помощью метода getText().
Состояние флажка меняется, когда пользователь нажимает на него, либо программно. Чтобы изменить программно, можно воспользоваться методами setChecked() или toggle().
Также можно задать состояние флажка заранее через XML при создании CheckBox с помощью атрибута android:checked.
Аналогично ToggleButton, к флажкам можно добавить слушатель, который будет выполнять нужные операции при изменении состояния флажка. Сделать это можно с помощью метода setOnCheckedChangeListener(), либо интерфейса OnCheckedChangeListener (о том, как пользоваться интерфейсами, описано здесь).
Чтобы узнать текущее состояние флажка, можно воспользоваться методом isChecked(), который вернёт true, если флажок активен и false — неактивен. Например, можно считывать значения флажков и выполнять соответствующие операции.
При необходимости, можно изменить цвет флажка со стандартного на какой-либо другой. Для этого в папке res/values/styles.xml нужно создать новый стиль. Возьмём, например, основной цвет приложения.
После этого в коде разметки для CheckBox нужно добавить атрибут android:theme и указать созданный стиль.
Теперь наши флажки будут окрашены в цвет, который мы задали в стилях.
Источник
Android — расстояние между CheckBox и текстом
Есть ли простой способ добавить отступ между флажком в элементе управления CheckBox и соответствующим текстом?
Я не могу просто добавить начальные пробелы, потому что мой ярлык многострочный.
Как есть, текст слишком близко к флажку:
Ненавижу отвечать на свой вопрос, но в этом случае думаю, что мне нужно. После проверки @Falmarri был на правильном пути со своим ответом. Проблема в том, что элемент управления Android CheckBox уже использует свойство android: paddingLeft, чтобы получить текст, где он находится.
Красная линия показывает значение смещения paddingLeft всего CheckBox
Если я просто переопределяю это заполнение в моем макете XML, это портит макет. Вот что делает установка paddingLeft = «0»:
Оказывается, вы не можете исправить это в XML. Вы должны сделать это в коде. Вот мой фрагмент с жестко закодированным увеличением отступа 10dp.
Это дает вам следующее, где зеленая линия — это увеличение заполнения. Это безопаснее, чем жесткое кодирование значения, поскольку разные устройства могут использовать разные рисования для флажка.
ОБНОВЛЕНИЕ — Как люди недавно упоминали в ответах ниже, это поведение явно изменилось в Jelly Bean (4.2). Ваше приложение должно будет проверить, на какой версии оно работает, и использовать соответствующий метод.
Для 4.3+ это просто установка padding_left. Смотрите ответ htafoya для деталей.
Источник
Как использовать CheckBox в Android
CheckBox принадлежит классу android.widget.CheckBox. Android CheckBox class является подклассом класса CompoundButton. Обычно он используется в месте, где пользователь может выбрать один или несколько вариантов из заданного списка вариантов. Например, выбор хобби.
Классовая иерархия:
У него есть два состояния — проверено или не проверено .
Методы класса CheckBox
- public boolean isChecked (): Если CheckBox находится в проверенном состоянии, вернуть true, иначе false.
- public void setChecked (логическое состояние): изменяет состояние CheckBox.
Ниже приведен код для примера, где пользователь выбирает свои хобби из данного списка, содержащего рисование, чтение, пение и приготовление пищи с помощью CheckBox.
MainActivity.java
// Ниже приведен код для MainActivity.java
public class MainActivity extends AppCompatActivity <
CheckBox ch, ch1, ch2, ch3;
protected void onCreate(Bundle savedInstanceState) <
// Связывание MainActivity.java с файлом activity_main.xml
// Находим CheckBox по его уникальному идентификатору
// Эта функция вызывается при нажатии кнопки.
public void Check(View v)
// Объединение отмеченных опций в if
// isChecked () используется для проверки
// CheckBox в истинном состоянии или нет.
msg = msg + » Painting » ;
msg = msg + » Reading » ;
msg = msg + » Singing » ;
msg = msg + » Cooking » ;
// Тост создан для отображения
// сообщение с использованием метода show ().
Источник
Android — Интервал между CheckBox и текстом
Есть ли простой способ добавить дополнение между флажком в элементе управления CheckBox и связанным с ним текстом?
Я не могу просто добавить ведущие пробелы, потому что моя метка многострочная.
As-is, текст слишком близко к флажку:
ОТВЕТЫ
Ответ 1
Я ненавижу отвечать на свой вопрос, но в этом случае я думаю, что мне нужно. После проверки, @Falmarri был на правильном пути с его ответом. Проблема в том, что элемент управления Android CheckBox уже использует свойство android: paddingLeft для получения текста там, где он есть.
Красная строка показывает значение смещения paddingLeft для всей CheckBox
Если я просто переопределяю это дополнение в своем XML-макете, это испортит макет. Здесь какая настройка paddingLeft = «0» делает:
Оказывается, вы не можете исправить это в XML. Вы делаете это в коде. Здесь мой фрагмент с жестко закодированным дополнением увеличивается на 10dp.
Это дает вам следующее: зеленая линия — это увеличение отступов. Это безопаснее, чем hardcoding значение, так как различные устройства могут использовать различные чертежи для этого флажка.
ОБНОВЛЕНИЕ. Как недавно упоминалось в ответах ниже, это поведение, по-видимому, изменилось в желе Bean (4.2). Вашему приложению нужно будет проверить, в какой версии он работает, и использовать соответствующий метод.
Ответ 2
Учитывая ответ @DougW, то, что я делаю для управления версией, проще, я добавляю к своему представлению checkbox:
где dimen находится в двух папках значений:
значения-v17 (4.2 JellyBean)
У меня есть пользовательская проверка, используйте dps для вашего наилучшего выбора.
Ответ 3
Используйте атрибут android:drawableLeft вместо android:button . Чтобы установить отступы между возможностью рисования и текстом, используйте android:drawablePadding . Чтобы разместить растягиваемое использование android:paddingLeft .
Ответ 4
Android 4.2 Jelly Bean (API 17) помещает текст paddingLeft из кнопки buttonDrawable (правая граница ints). Он также работает в режиме RTL.
До 4.2 paddingLeft игнорировал buttonDrawable — он был взят из левого края представления CompoundButton.
Вы можете решить это через XML — установите paddingLeft на buttonDrawable.width + requiredSpace на старых андроидах. Установите его в requiredSpace только на API 17 вверх. Например, используйте ресурсы размера и переопределите в папке ресурсов значений-v17.
Изменение было введено через android.widget.CompoundButton.getCompoundPaddingLeft();
Ответ 5
Да, вы можете добавить дополнение, добавив дополнение.
Ответ 6
Если вам нужен чистый дизайн без кодов, используйте:
Трюк заключается в том, чтобы установить прозрачность цвета для android:drawableLeft и присвоить значение для android:drawablePadding . Кроме того, прозрачность позволяет использовать эту технику на любом цвете фона без побочного эффекта — как несоответствие цвета.
Ответ 7
Почему бы просто не расширить Android CheckBox, чтобы вместо этого было удобнее. Таким образом, вместо того, чтобы исправлять его в коде каждый раз, когда вы используете CheckBox, вы можете просто использовать фиксированный CheckBox.
Первое расширение CheckBox:
Второй в вашем xml вместо создания обычного CheckBox создайте свой расширенный
Ответ 8
Простое решение, добавьте эту строку в свойства CheckBox, замените 10dp на требуемое значение расстояния
Ответ 9
Я не знаю парней, но я тестировал
и только перемещает текст вправо, а не весь элемент управления.
Мне это подходит.
Ответ 10
В моем случае я решил эту проблему, используя этот атрибут CheckBox в XML:
Android: paddingLeft = «@DIMEN/activity_horizontal_margin»
Ответ 11
API 17 и выше, вы можете использовать:
API 16 и ниже, вы можете использовать:
Ответ 12
Я только что заключил в этом:
Переопределите CheckBox и добавьте этот метод, если у вас есть пользовательский drawable:
или это, если вы используете доступную систему:
Спасибо за ответ:)
Ответ 13
Такое поведение, похоже, изменилось в желе Bean. Трюк paddingLeft добавляет дополнительное дополнение, делая текст слишком далеко справа. Кто-нибудь еще заметил, что?
Ответ 14
Ответ 15
Если у вас есть настраиваемый селектор изображений для флажка или радиообмена, вы должны установить одинаковое свойство кнопки и фона, например:
Вы можете управлять размером флажка или дополнением кнопки с фоновым свойством.
Ответ 16
только вам нужно иметь один параметр в XML файле
Ответ 17
Если вы создаете пользовательские кнопки, например. см. изменить внешний вид окна флажка
Затем просто увеличьте ширину btn_check_label_background.9.png, добавив один или два столбца прозрачных пикселей в центре изображения; оставьте маркеры с 9 патчами, как они есть.
Ответ 18
То, что я сделал, имеет TextView и CheckBox внутри (Относительно) Layout . TextView отображает текст, который я хочу видеть пользователю, а CheckBox не имеет никакого текста. Таким образом, я могу установить положение/дополнение CheckBox везде, где захочу.
Ответ 19
У меня была та же проблема с Galaxy S3 mini (android 4.1.2), и я просто сделал свой собственный флажок, добавив AppCompatCheckBox вместо из CheckBox. Теперь он отлично работает.
Ответ 20
Вам нужно получить размер изображения, которое вы используете, чтобы добавить дополнение к этому размеру. На внутренности Android они получают возможность вытягивания, которую вы указываете в src, и затем используете ее размер. Так как это приватная переменная, и нет никаких геттеров, к которой вы не можете получить доступ. Также вы не можете получить com.android.internal.R.styleable.CompoundButton и получить оттуда оттуда.
Итак, вам нужно создать свой собственный стиль (например, custom_src), или вы можете добавить его непосредственно в свою реализацию RadioButton:
Ответ 21
Как вы, вероятно, используете переносимый селектор для вашего свойства android:button , вам нужно добавить android:constantSize=»true» и/или указать шаблон по умолчанию, подобный этому:
После этого вам нужно указать атрибут android:paddingLeft в вашем флажке xml.
Минусы:
В редакторе макета вы перейдете к элементу под флагом с api 16 и ниже, в этом случае вы можете исправить его, создав свой собственный класс флажка, например но для уровня api 16.
Обоснование:
это ошибка, так как вызов StateListDrawable#getIntrinsicWidth() используется внутри CompoundButton , но может возвращать значение , если нет текущего состояния и не используется постоянный размер.
Ответ 22
Все, что вам нужно сделать, чтобы преодолеть эту проблему, — это добавить android:singleLine=»true» в checkBox в вашем макете xroid.
и ничего особенного не будет добавлено программно.
Ответ 23
Изображение флажка перекрывалось, когда я использовал свои собственные чертежи из селектора, я решил это с помощью кода ниже:
Благодаря Алексею Семенюку
Ответ 24
Я получаю эту проблему, меняя изображения. Просто добавлен дополнительный прозрачный фон в png файлах. Это решение отлично работает на всех API.
Ответ 25
Возможно, это поздно, но я создал утилиты для решения этой проблемы.
Просто добавьте эти методы в ваши utils:
И используйте вот так:
Ответ 26
Вместо того, чтобы корректировать текст для флажка, я сделал следующее, и он работал у меня для всех устройств. 1) В XML добавьте флажок и текстовое представление в соседние друг с другом; сохраняя некоторое расстояние. 2) Установите размер текста флажка в 0sp. 3) Добавьте относительный текст в это текстовое окно рядом с этим флажком.
Источник