- 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 Basics with Example
- Android Checkbox Basics with Example
- Use Of Checkbox
- Adding Checkbox
- Changing Properties
- Method to take some action in Checkbox
- Урок 20. Android Data Binding. Обработка событий
- Ссылка на метод
- Вызов метода
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 Basics with Example
Android Checkbox Basics with Example
Use Of Checkbox
So generally we use check boxes whenever we want to choose a list of items. For example, you are making a groceries shop app, you can use checkboxes to select the items. Or for example, you want to give the option to the user to select his favourite animals or his favourite dishes or favourite things. So basically whenever we want to select multiple items, we use checkboxes.
Adding Checkbox
We can add checkboxes by going to the palette and in the widget section and then drag and drop checkbox widget to Android activity. We must also take a button so that on the basis of button click, we can decide which checkboxes are checked and on the basis of checked checkboxes, we can take some action.
Changing Properties
In order to change the properties please select all the check boxes and in the properties go to layout_width and change it to fill_parent so that this width is filled in the width.
We can also change the name of these checkboxes, for example, we want to create a list of animals so that the user can choose his favourite animals such as dog and there you will see an option ‘checked’ so, if you choose this option checked, you can see whenever you run the application, it will be checked by default. Otherwise, when you uncheck this option, whenever you start your activity, the checkbox will be unchecked. So this is the default condition you want to check to your checkbox. The name to the checkbox according to user’s need.
Now we will go to the code part of our activity, therefore, go to the MainActivity.java file and there we will declare three checkbox variables and one button variable.
After declaring the variable we now have to create a method. This will be the public method and it’s not going to return anything and we are going to name our method as, for example, add a listener on the button and then it’s not going to take any argument and we will create or prepare the body of our function in these curly brackets. Inside our method, we have to cast our checkboxes and button for example, for the checkbox one we are going to cast it to the dog checkbox.
Now after casting all our widgets, we will have to add the listener so we are going to take our button variable and we will set the listener to it. Set on click listener and in here in the arguments, just press enter and we are going to create a new listener. So new on click listener and it will take three arguments.
So we will create our String buffer and toast and in this result, we are going to append the checked items first. So first of all, take the result variable so in here Result.append and we can append any string to it, this will give you the binary option true or false or one or zero. If it’s checked it’s going to give you true or if it’s unchecked it’s going to give you false.
And now we can display this result to the toast.
Now once we have created this method we just need to call it in our onCreate method therefore just go below this function setContentView and just paste your method name.
And now our application is running. for example, when we check box 1 and check box 2 and press this select button, the answer is a dog is equal to true and the cat is equal to true as you can see. Dog true cat true and cow false. So in this way you can choose your selection on the basis of is a select method here.
Method to take some action in Checkbox
Now let’s create a method on which we will allow the user to take some action on the checkbox click itself. So for example, once the user selects this dog checkbox, we are going to display some message that you selected dog without any button click event. So for that, we have is declare one more method, which will be public and cast our checkbox 1 variable because we want to take action on checkbox 1 and add a listener.
So as we added a listener to the dog checkbox only so whenever we check it, it shows dog is selected. But you can add the same kind of listener to these checkboxes also. So in this way, you can use checkboxes in your Android app.
Read More About Android Radio Button & Radio Groups Basics
Источник
Урок 20. Android Data Binding. Обработка событий
В этом уроке рассмотрим как обрабатывать события View.
Полный список уроков курса:
С помощью биндинга мы можем вешать обработчики на события View. Есть два способа это сделать, давайте рассмотрим их.
Ссылка на метод
Рассмотрим пример с onClick. Допустим, у нас на экране, который отображает данные по работнику (Employee), есть кнопка Delete и мы хотим присвоить ей onClick обработчик.
Создаем свой класс обработчик:
Он не обязательно должен наследовать OnClickListener. Но его метод должен быть public и иметь те же параметры, что и метод OnClickListener.onClick(View view), т.е. должен быть один параметр типа View. Имя метода может быть любым.
Прописываем этот обработчик, как variable в layout.
В onClick кнопки ссылаемся на его метод onDelete:
Осталось создать объект MyHandler и передать его в биндинг:
По нажатию на кнопку Delete будет вызван метод onDelete объекта myHandler.
Если при попытке настроить обработчик в биндинге вы получаете подобную ошибку:
Listener class android.view.View.OnClickListener with method onClick did not match signature of any method handler::onDelete
внимательно проверьте, что модификаторы доступа и параметры метода в вашем обработчике такие же, что и в методе интерфейса стандартного обработчика. В случае с onClick — это OnClickListener.
Вызов метода
Если в первом способе мы просто указывали биндингу, какой метод обработчика вызвать, то во втором способе мы просто сами будем вызывать этот метод. Этот способ более гибкий, т.к. метод нашего обработчика не обязан иметь те же параметры, что и метод интерфейса стандартного обработчика.
Рассмотрим снова пример с onClick. Создаем обработчик.
В метод onDelete мы планируем получать не View, как в примере раньше, а объект Employee.
MyHandler так же, как и ранее, прописываем в variable и передаем в binding.
В onClick кнопки пишем вызов
Здесь используетcя лямбда. На вход нам предлагаются те же параметры, что и в методе интерфейса стандартного обработчика, т.е. view из OnClickListener.onClick(View view). Но мы не используем этот параметр. В метод onDelete мы передаем employee, который у нас описан, как один из variable в layout.
В результате по нажатию на кнопку, биндинг предоставит нам View, на которое было нажатие. Но мы его проигнорируем, возьмем у биндинга объект Employee и отправим в handler.onDelete.
Биндинг дает нам возможность не писать параметры в лямбде, если они нам не нужны. Т.е. можно сделать так:
Таким образом биндинг поймет, что его View нам не нужно, и не будет его передавать. Имейте ввиду, что если в стандартном обработчике несколько параметров, то вы можете указать либо все параметры, либо ни одного.
Чтобы закрепить тему, давайте рассмотрим пример с CheckBox. Например, на экране с данными по работнику есть чекбокс Enabled, который включает/выключает работника.
В обработчике создаем метод,
Будем получать объект Employee и состояние чекбокса.
В onCheckedChanged пишем вызов метода нашего обработчика.
В лямбде указываем параметры, которые пришли бы нам в стандартном обработчике OnCheckedChangeListener.onCheckedChanged(CompoundButton compoundButton, boolean checked).
Параметр view нам не понадобится, а вот checked передаем в метод вместе с employee.
Теперь по нажатию на чекбокс, биндинг будет вызывать метод onEnabled и передавать туда Employee объект и состояние чекбокса.
Рассмотрим еще несколько интересных моментов.
При вызове обработчика мы можем использовать условия.
Например, есть такой обработчик.
Мы можем в layout указать его методы следующим образом
Т.е. если чекбокс включен, то вызываем метод onEnabled, иначе — onDisabled.
Если в одном из случаев нам ничего не надо вызывать, то можно использовать void
В биндиге по умолчанию есть переменная context, которую вы всегда можете использовать, если есть необходимость.
Значение переменной context получено вызовом метода getContext у корневого View вашего layout.
В этих примерах я создавал отдельный объект обработчика, но разумеется вы можете создавать интерфейсы. прописывать их в качестве variable в layout и использовать хоть само Activity в качестве реализации.
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник