Как сделать кнопку неактивной android studio
После серии сложных уроков, спустимся немного с небес программирования и уделим внимание начинающим :). В сегодняшнем уроке будет показано, как обрабатывать нажатие кнопок Button в Android приложении. Мы рассмотрим два основных метода, которые наиболее используемые в практике любого программиста.
Итак, создаем новый проект, как это сделать читаем тут. Все названия по умолчанию, выбираем Blank Activity. Для начала нужно создать несколько кнопок, над которыми мы будем издеваться. В файле activity_main.xml создаем наши кнопки:
Как видите, мы создали всего 2 кнопочки (хватит с нас):
Теперь приступаем к первому методу обработки нажатия. В нем мы зададим для каждой из наших кнопок свой собственный метод обработки нажатия. Как это сделать? К коду обоих кнопок мы должны добавить строку, задающую ей нажатие:
В кавычках "" мы задаем имя метода обработки щелчка, оно может быть любое, как, к примеру, и текст на кнопке. Зададим для первой кнопки метод Click1, а для второй - Click2:
Никаких визуальных изменений при этом вид кнопки не приобрели. Но сама по себе эта строка не придала кнопкам чудесных свойств, это еще не сам метод обработки щелчка, мы просто присвоили кнопкам функцию нажатия. Метод обработки этих нажатий нужно создать, а также описать, что будет происходить при нажатии. Чтобы сделать это, мы:
- ставим курсор на слово Click1 в первой кнопке;
- нажимаем комбинацию клавиш Alt+Enter;
- мы видим появившееся меню, которое предлагает нам создать метод обработки щелчка:
смело нажимаем на первую строку Create 'Click1(View)' in 'MainActivity'. После выбора этой строки, нас кидает а файл MainActivity.java, где мы и наблюдаем свой созданный метод для обработки нажатия кнопки 1:
Именно внутри этого метода мы и напишем код, который будет задавать действия при нажатии на кнопку. Сделайте аналогично метод обработки нажатия и для второй кнопки.
На этом первый метод реализован. Можете запустить приложение на эмуляторе либо устройстве и посмотреть на результат:
Первый метод хорош когда у нас в приложении мало кнопок, либо она вообще одна. Тогда при обработке нажатия таким методом наш код не будет требовать ни много места, ни усилий. Но вот когда у нас много кнопок, а чаще всего их ну точно не одна, то лучше использовать второй метод. Он немного посложнее, но в то же время и удобнее.
Теперь, в отличии от первого способа, мы должны создать один обработчик нажатия, общий для всех кнопок. Поэтому в кодах обоих кнопок меняем в строках android: OnClick название метода обработки, оно будет одинаково для обоих кнопок:
Аналогично первому способу, создаем метод обработки (курсор на Click, Alt+Enter, ну вы поняли).
Переходим к работе в файле MainActivity.java. Ниже метода onCreate у нас создан нужный нам метод обработки нажатий:
Второй метод заключается в том, что для всех кнопок будет использоваться всего один метод обработки нажатий. С помощью команды switch (v.getId()) мы будем обращаться к необходимым кнопкам по их id (а для каждой кнопки мы его задали строчкой android:id="" , id первой кнопки "b1" , второй - "b2" ).
В switch (view.getId()) мы с помощью команды case R.id. обращаемся к каждой нашей кнопке по ее id адресу и обрабатываем ее нажатие:
Проверим работоспособность этого метода. Запускаем приложение, нажимаем по кнопкам и видим аналогичный первому способу результат.
В этом уроке вы узнаете, как в андроид повесить слушатель (OnClickListener) на кнопку (Buttons). Как заставить кнопку реагировать на нажатие, и как обрабатывать нажатие кнопки на экране android устройства. Также вы познакомитесь с тремя разными способами обработки нажатия кнопки.
В первом случае на вход методу setOnClickListener подается объект с интерфейсом View.OnClickListener который и будет обрабатывать нажатия.
Во втором случае мы тоже используем метод setOnClickListener, но в качестве обработчика используем текущий объект Activity (this) реализующий интерфейс View.OnClickListener
И третий способ заключается он в использовании атрибута onClick для элемента Button в XML макете и создании своего метода в классе активности.
Исходный код проекта можно скачать по ссылке внизу
Класс Button — самый используемый из всех элементов управления. Так как является наследником Textview, то использует многие знакомые нам атрибуты: textColor, textSize и другие.
Если разместить на экране кнопку и нажать на неё, то ничего не произойдёт. Необходимо написать код, который будет выполняться при нажатии. Существует несколько способов обработки нажатий на кнопку. Итак, обработка событий.
Обработка событий
Принцип обработки событий прост: источник генерирует событие и посылает его одному или более слушателям (listener). В этой схеме слушатель просто ожидает до тех пор, пока не получит событие. Как только событие получено, слушатель обрабатывает его и возвращает управление.
В этой модели обработки событий слушатели должны:
- регистрироваться источником, для того чтобы получать извещения о событиях;
- иметь методы для обработки событий.
Таким образом, чтобы создавать приложения, взаимодействующие с пользователем, необходимо:
- зарегистрировать его для требуемого элемента управления,
- написать обработчик события.
Методы, принимающие и обрабатывающие события, определены в наборе интерфейсов .
Класс view содержит набор интерфейсов, которые называются on. Listener(), в каждом из которых объявлен единственный абстрактный метод обратного вызова. Этот метод необходимо переопределить в пользовательском классе. Его будет вызывать система Android, когда экземпляр view (или потомок), к которому был подсоединен слушатель события, вызывается пользовательским взаимодействием с интерфейсом приложения.
Всего класс view содержит шесть интерфейсов:
- OnClickListener;
- OnLongClickListener;
- OnFocusChangeListener;
- OnKeyListener;
- OnTouchListener;
- OnCreateContextMenuListener.
Обработка нажатия кнопки
Создайте новый проект MyButton. Откройте файл разметки и разместите три кнопки с идентификаторами button1, button2 и button3, надписями "Button l", "Button 2" и "Button 3", а также две метки с идентификаторами textView1 и textView2 и надписями: у первой ”Нажата кнопка:”, а у второй оставляем значение по умолчанию ”TextView”. Графическая разметка с обозначениями представлена ниже.
Существует несколько способов обработки нажатия на кнопку. Рассмотрим их.
Первый способ
Первый способ разработан для Android и использует атрибут XML – onClick, который записывается в XML-коде элемента управления (в частности и Button), нажатие которого мы собираемся обрабатывать.
android:onClick="onMyClick"
android:onClick – атрибут, которому присваивается имя метода обработки события
onMyClick – метод, который будет обрабатывать нажатие. Имя метода должно быть осмысленным. Сам метод записывается в программном коде активности.
В классе активности метод записывается в следующем формате:
Попробуем этот метод на практике. Сделайте следующее:
1. Для каждой кнопки в XML-коде кнопки запишете обработчик:
android:onClick="onMyClick"
Обработчик будет один для всех кнопок.
2. В классе public class MainActivity extends Activity
Запишем один метод onMyClick, который будет обрабатывать все кнопки
Второй способ
Второй способ является традиционным для Java и использует интерфейсы. Для этого в нашем классе необходимо реализовать интерфейс View.OnClickListener. Данный интерфейс содержит единственный метод:
abstract void onClick(View v), который необходимо определить в нашем классе.
Подключение интерфейса выполняется следующим образом:
1. В классе public class MainActivity extends Activity напечатаете implements View.OnClickListener
Для написания используйте подсказки Eclipse: наберите слово i и нажмите комбинацию клавиш Ctrl+Space для вывода вариантов продолжения. Eclipse предложит ключевое слово implements, нажимаем Enter. Далее, набираем View, ставим точку, Eclipse предложит список вариантов, выбираем OnClickListener.
Eclipse создаст заготовку метода onClick(View v):
2. В методе protected void onCreate(Bundle savedInstanceState)
выполняем поиск наших кнопок (findViewById) и регистрируем каждую кнопку как слушателя событий с помощью метода setOnClickListener():
Все готово. Осталось написать код обработчика нажатия кнопок.
Для демонстрации второго метода обработки нажатия наших кнопок внесем в наш класс следующие изменения:
Удалим из XML-файла для всех кнопок
android:onClick="onMyClick"
полностью заменим метод public void onMyClick(View v) < …>.
Напишем обработчик onClick(View v). Код этого обработчика повторяет код прежнего обработчика: различия только в названии метода и выводимом тексте.
В любой программе которую можно только найти то ли на Android, то ли на другую ОС, везде вы найдете кнопки или еще какие то элементы интерфейса при клике на который выполняется какое то действие, эти действия называются событиями. В этом не большом уроке я познакомлю вас с обработкой этих событий на примере Button кнопки.
Рассмотрим первый пример в который будет выглядеть так:
Добавим кнопку на форму main.xml с помощью GUI конструктора или через main.xml файл.
И теперь познакомимся с первым способом создания обработчика на кнопку.
Способ 1.
В main.xml в тег нужно добавить атрибут android:onClick , где это имя метода который и будет выполнять то действие, которое произойдет после нажатия на кнопку.
Пример указанный выше демонстрирует событие нашей кнопки.
При использовании этого способа в обязательным условием является использование параметра в методе btnHelloClick(View v) только в этом случае метод будет выполнять действие которое должно повлиять на изменения на форме main.xml.
В данном примере я при нажатии на кнопку изменяю текст внутри кнопки с “Say hello!” на “Hello!”.
Способ 2.
На самом деле, способ обработки щелчка кнопки, который я вам показал, является относительно новым для разработчиков. Google рекомендует использовать данный способ как удобный, требующий меньше кода и понятный для чтения. Но тем не менее вам придется сталкиваться со старым способом, который берет свои корни от Java. Поэтому необходимо изучить и второй способ, чтобы понимать другие примеры.
Добавим новую кнопку на форму и назовем её “Hello World!”, после чего xml вид нашей формы будет такой:
Теперь давайте повесим обработчик на только что созданную кнопку.
этот код добавляем в onCreate().
После этого наша текст нашей кнопки с “Hello World!” будет меняться на “Hi People”.
ПОХОЖИЕ ПУБЛИКАЦИИ
15 комментариев к статье "Android. Обработчики событий для Button"
Спасибо, помогли сделать первые шаги в разработке под Android.
Очень рад, что смог вам помочь… Успехов!
Добрый день! Админ нужен твой помощь
public void onClicktwo(View v) if (MediaPlayer.create(getApplicationContext(), R.raw.sound2)!=null) MediaPlayer.create(getApplicationContext(), R.raw.sound2).start();
> else MediaPlayer.create(getApplicationContext(), R.raw.sound2).stop();
>
цикл не работает что делать ?
Спасибо за пример.
Поясните если я меняю button.setText(“Hi People!”); на button.setText(“Hi DIMA!”);
запуская проект эмулятор у меня все равно по нажатию показывает Hi People.
Что надо сделать?
в setOnClickListener это нужно делать.
Из Вашего примера я заменил:
и в модуле MyActivity.java:
public class MyActivity extends Activity /**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button buttonHello = (Button) findViewById(R.id.button1);
buttonHello.setOnClickListener(new View.OnClickListener() @Override
public void onClick(View v) Button button = (Button)findViewById(R.id.button1);
button.setText(“Hi DIMA!”);
>
>);
>
public void btnHelloClick(View v) Button button = (Button)findViewById(R.id.button);
button.setText(“DIMA!”);
>
>
дальше делал в меню делал Build – Compile MyActivity.java: и Make Project
Нажимаю запустить, открывается эмулятор где находится старый проект с кнопками Вашего проекта..как я понимаю где то надо поставить опцию чтобы он перезаписал проект на эмуляторе, но где это сделать?
странно, зачем писать Button button = (Button)findViewById(R.id.button1); в OnClick’е, если можно одной строкой на Button1 сразу текст повесить
public void onClick(View v) Button button = (Button)findViewById(R.id.button1);
button.setText(“Hi People!”);
>
Вы скорее всего используете не экземпляр класа, а напрямую класс вот оно и говорит что данный метод не имеет модификатора static. Если же не в этом проблема то тогда в Android Studio она еще не совсем стабильна.
Благодарю! Для начинающих, самое оно.
case R.id.imagebutton2:
TextView text2 = (TextView)findViewById(R.id.text2);
text2.setText(«Изменился текст2″);
break;
>
>
В этом новичек:)
Спасибо за ответ.
Здравствуйте Александр, благодарен вам за то что вы делаете..
Такой вопрос, допустим есть политическая карта мира, нужно сделать так чтобы при нажатии на определенную область(страна) эта область(страна) подсвечивалась, как бы вы посоветовали это осуществить? Я думал сделать фрейм лейаут и на него накидать пнг картининки всех стран и сделать их в виде зумИмэйджБаттон, но очень сложно иими управлять и сшивать… как бы это реализовать, поможете?
Здравствуйте! Ни где не могу найти инфу о том как добавить в приложение кнопку “Добавить в избранное” что бы при нажатии определенный скажем текст добавлялся в избранное, надеюсь вы поможете!
Здоаствуйте, как сделать 4 кнопки, принажати названич кнопок меняются местами
Читайте также: