- Подготовка
- Обработка события нажатия на кнопку в приложении
- Один обработчик нажатия для нескольких кнопок
- Обработчик события непосредственно при нажатия на кнопку
- Дополнительно
Подготовка
Создаем проект, выбираем Empty Activity, Activity Name: MainActivity, Layout Name: activity_main. В лайоуте /res/layout/activity_main.xml оставляем вывод текста TextView, добавляем кнопку Button и прописываем для каждого элемента свой id. После нажатия на кнопку будем выводить текст в TextView, который покажет, что событие было обработано.
В итоге /res/layout/activity_main.xml будет выглядеть примерно следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.firestork.coderstat.MainActivity">
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me" />
</android.support.constraint.ConstraintLayout>
TextView и Button - 2 элемента которые нам понадобятся.
Далее в MainActivity (MainActivity.java) добавим описание Button и TextView, для возможности обращения к ним из любого метода класса, инициализируем их в методе onCreate() и заполним с помощью метода findViewById():
package com.firestork.coderstat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView myTextView;
Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.myTextView);
myButton = (Button) findViewById(R.id.myButton);
}
}
Приступаем к обработке события нажатия на кнопку.
Обработка события нажатия на кнопку в приложении
1 способ. Обработка события нажатия с помощью метода setOnClickListener
Метод setOnClickListener() прослушивает событие нажатия на кнопку. В методе onCreate() вводим имя кнопки myButton, ставим точку (.) и вводим setO, далее студия сама предложит варианты, вот что получится:
myButton.setOnClickListener();
Внутри скобок набираем new O, далее студия подскажет то что необходимо (OnClickListener), в итоге получим следующее:
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
Далее с помощью метода setText добавляем изменение текста в TextView:
myTextView.setText("Все ок)");
В итоге обработчик нажатия на кнопку будет выглядеть так:
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myTextView.setText("Все ок)");
}
});
Сохраняем, запускаем приложение и жмем кнопку.
Полный код MainActivity (MainActivity.java):
package com.firestork.coderstat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView myTextView;
Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.myTextView);
myButton = (Button) findViewById(R.id.myButton);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myTextView.setText("Все ок)");
}
});
}
}
Код метода OnClickListener() можно вынести отдельно, например для работы с несколькими кнопками. Создаем обработчик нажатия:
OnClickListener oMyButton = new OnClickListener() {
@Override
public void onClick(View v) {
myTextView.setText("Все ок)");
}
};
И присваиваем обработчик для кнопки:
myButton.setOnClickListener(oMyButton);
В таком случае MainActivity (MainActivity.java) примет вид:
package com.firestork.coderstat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;
public class MainActivity extends AppCompatActivity {
TextView myTextView;
Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.myTextView);
myButton = (Button) findViewById(R.id.myButton);
OnClickListener oMyButton = new OnClickListener() {
@Override
public void onClick(View v) {
myTextView.setText("Все ок)");
}
};
myButton.setOnClickListener(oMyButton);
}
}
2 способ. Обработка события нажатия с помощью интерфейса OnClickListener
Для реализация данного метода необходимо добавить в класс MainActivity интерфейс OnClickListener, делается это следующим образом - implements View.OnClickListener, после чего объявление класса примет вид:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
После добавления интерфейса строка будет подчеркнута красным, все из-за того что у нас еще нет метода onClick() интерфейса OnClickListener, чтобы это исправить жмем Alt + Enter (если при нажатии ничего не происходит, то проверьте текущую раскладку, при кириллической раскладке комбинация может не работать, переведите ввод на латинскую раскладку, например на английский) в любом месте подчеркивания, далее выбираем Implemente Methods в открывшимся окне выбираем onClick и жмем ok. После чего в конец класса MainActivity будет добавлен следующий код:
@Override
public void onClick(View v) {
}
В этот метод добавляем код, который необходимо выполнить по нажатию на кнопку:
@Override
public void onClick(View v) {
myTextView.setText("Все ок)");
}
Далее в методе onCreate() назначим обработчик для кнопки, в качестве параметра передаем this, т.е. текущий объект:
myButton.setOnClickListener(this);
Сохраняем, запускаем приложение и жмем кнопку.
Полный код MainActivity (MainActivity.java):
package com.firestork.coderstat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView myTextView;
Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.myTextView);
myButton = (Button) findViewById(R.id.myButton);
myButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
myTextView.setText("Все ок)");
}
}
3 способ. Обработка события нажатия с помощью атрибута onClick
В данном способе необходимо добавить атрибут onClick для нужной кнопки, есть несколько способов добавления этого атрибута:
1) Открываем activity_main.xml, во вкладке "Design" жмем на нужную кнопку и в окне "Properties", ищем свойство onClick и вводим в пустое поле название метода для обработки события нажатия кнопки.
2) Или откройте файл activity_main.xml в режиме "Text" и добавьте в элемент Button атрибут onClick с названием метода обработки нажатия кнопки:
android:onClick="clickMyBtn"
В обоих случаях, код файла activity_main.xml будет выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.firestork.coderstat.MainActivity">
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="clickMyBtn"
android:text="Click me" />
</android.support.constraint.ConstraintLayout>
Далее открываем класс MainActivity (MainActivity.java) и добавляем код метода clickMyBtn():
public void clickMyBtn(View view) {
myTextView.setText("Все ок)");
}
Сохраняем, запускаем приложение и жмем кнопку.
Полный код MainActivity (MainActivity.java):
package com.firestork.coderstat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView myTextView;
Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.myTextView);
myButton = (Button) findViewById(R.id.myButton);
}
public void clickMyBtn(View view) {
myTextView.setText("Все ок)");
}
}
3 в 1. Все 3 способа в одном примере
Далее для закрепления можно реализовать все три способа на одном экране, для этого в main_activity.xml добавим 3 кнопки, по одной кнопке на каждый способ, (полный код main_activity.xml):
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.firestork.coderstat.MainActivity">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/myButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1 способ"
android:layout_weight="1"
/>
<Button
android:id="@+id/myButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2 способ"
android:layout_weight="1"
/>
<Button
android:id="@+id/myButton3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3 способ"
android:layout_weight="1"
android:onClick="clickMyBtn"
/>
</LinearLayout>
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
И сам класс MainActivity со всеми тремя способами (файл MainActivity.java):
package com.firestork.coderstat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView myTextView;
Button myButton1;
Button myButton2;
Button myButton3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.myTextView);
myButton1 = (Button) findViewById(R.id.myButton1);
myButton2 = (Button) findViewById(R.id.myButton2);
myButton3 = (Button) findViewById(R.id.myButton3);
OnClickListener oMyButton = new OnClickListener() {
@Override
public void onClick(View v) {
myTextView.setText("Вы использовали 1-й способ");
}
};
myButton1.setOnClickListener(oMyButton);
myButton2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
myTextView.setText("Вы использовали 2-й способ");
}
public void clickMyBtn(View view) {
myTextView.setText("Вы использовали 3-й способ");
}
}
Сохраняем, запускаем, проверяем.
Один обработчик нажатия для нескольких кнопок
Часто необходимо сделать один обработчик нажатия для нескольких кнопок, т.к. функционал может практически не отличаться. Приведем пример для всех 3-х способов.
Один обработчик нажатия кнопки для 1-го способа, setOnClickListener
И так в main_activity.xml имеются 3 кнопки:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.firestork.coderstat.MainActivity">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/myButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Кнопка 1"
android:layout_weight="1"
/>
<Button
android:id="@+id/myButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Кнопка 2"
android:layout_weight="1"
/>
<Button
android:id="@+id/myButton3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Кнопка 3"
android:layout_weight="1"
/>
</LinearLayout>
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Открываем класс MainActivity (MainActivity.java) и в обработчик добавляем разный вывод текста в зависимости от нажатой кнопки с помощью конструкции выборки switch case:
OnClickListener oMyButton = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.myButton1: myTextView.setText("Вы нажали на 1-ю кнопку"); break;
case R.id.myButton2: myTextView.setText("Вы нажали на 2-ю кнопку"); break;
case R.id.myButton3: myTextView.setText("Вы нажали на 3-ю кнопку"); break;
}
}
};
И присваиваем кнопкам обработчик:
myButton1.setOnClickListener(oMyButton); myButton2.setOnClickListener(oMyButton); myButton3.setOnClickListener(oMyButton);
Сохраняем, запускаем, пробуем.
Полный код MainActivity (MainActivity.java):
package com.firestork.coderstat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;
public class MainActivity extends AppCompatActivity {
TextView myTextView;
Button myButton1;
Button myButton2;
Button myButton3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.myTextView);
myButton1 = (Button) findViewById(R.id.myButton1);
myButton2 = (Button) findViewById(R.id.myButton2);
myButton3 = (Button) findViewById(R.id.myButton3);
OnClickListener oMyButton = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.myButton1: myTextView.setText("Вы нажали на 1-ю кнопку"); break;
case R.id.myButton2: myTextView.setText("Вы нажали на 2-ю кнопку"); break;
case R.id.myButton3: myTextView.setText("Вы нажали на 3-ю кнопку"); break;
}
}
};
myButton1.setOnClickListener(oMyButton);
myButton2.setOnClickListener(oMyButton);
myButton3.setOnClickListener(oMyButton);
}
}
Один обработчик нажатия кнопки для 2-го способа, интерфейс OnClickListener
В данном случае main_activity.xml оставляем как было описано выше (с тремя кнопками) и меняем код класса MainActivity. Добавляем интерфейс, реализацию метода onClick():
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.myButton1: myTextView.setText("Вы нажали на 1-ю кнопку"); break;
case R.id.myButton2: myTextView.setText("Вы нажали на 2-ю кнопку"); break;
case R.id.myButton3: myTextView.setText("Вы нажали на 3-ю кнопку"); break;
}
}
И присваиваем кнопкам обработчик:
myButton1.setOnClickListener(this); myButton2.setOnClickListener(this); myButton3.setOnClickListener(this);
Сохраняем, запускаем, пробуем.
Полный код класса MainActivity (MainActivity.java):
package com.firestork.coderstat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView myTextView;
Button myButton1;
Button myButton2;
Button myButton3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.myTextView);
myButton1 = (Button) findViewById(R.id.myButton1);
myButton2 = (Button) findViewById(R.id.myButton2);
myButton3 = (Button) findViewById(R.id.myButton3);
myButton1.setOnClickListener(this);
myButton2.setOnClickListener(this);
myButton3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.myButton1: myTextView.setText("Вы нажали на 1-ю кнопку"); break;
case R.id.myButton2: myTextView.setText("Вы нажали на 2-ю кнопку"); break;
case R.id.myButton3: myTextView.setText("Вы нажали на 3-ю кнопку"); break;
}
}
}
Один обработчик нажатия кнопки для 3-го способа, атрибут onClick
Для этого способа необходимо открыть activity_main.xml и добавить для всех кнопок атрибут android:onClick="clickMyBtn", для всех кнопок один метод:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.firestork.coderstat.MainActivity">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/myButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Кнопка 1"
android:layout_weight="1"
android:onClick="clickMyBtn"
/>
<Button
android:id="@+id/myButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Кнопка 2"
android:layout_weight="1"
android:onClick="clickMyBtn"
/>
<Button
android:id="@+id/myButton3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Кнопка 3"
android:layout_weight="1"
android:onClick="clickMyBtn"
/>
</LinearLayout>
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
В класс MainActivity добавляем метод для обработки нажатия:
public void clickMyBtn(View v) {
switch (v.getId()) {
case R.id.myButton1: myTextView.setText("Вы нажали на 1-ю кнопку"); break;
case R.id.myButton2: myTextView.setText("Вы нажали на 2-ю кнопку"); break;
case R.id.myButton3: myTextView.setText("Вы нажали на 3-ю кнопку"); break;
}
}
Сохраняем, запускаем, пробуем.
Полный код класса MainActivity будет выглядеть следующим образом (MainActivity.java):
package com.firestork.coderstat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView myTextView;
Button myButton1;
Button myButton2;
Button myButton3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.myTextView);
myButton1 = (Button) findViewById(R.id.myButton1);
myButton2 = (Button) findViewById(R.id.myButton2);
myButton3 = (Button) findViewById(R.id.myButton3);
}
public void clickMyBtn(View v) {
switch (v.getId()) {
case R.id.myButton1: myTextView.setText("Вы нажали на 1-ю кнопку"); break;
case R.id.myButton2: myTextView.setText("Вы нажали на 2-ю кнопку"); break;
case R.id.myButton3: myTextView.setText("Вы нажали на 3-ю кнопку"); break;
}
}
}
Обработчик события непосредственно при нажатии на кнопку
Все выше описанные методы обработки нажатия на кнопку в приложении будут срабатывать после того как вы уберете палец с кнопки, т.е. на отжатие кнопки. Для того что бы добавить обработчик непосредственно при касании, нажатии, на кнопку необходимо использовать слушатель OnTouchListener(). Попробуем его использовать.
В activity_main.xml добавим одну кнопку и текст:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.firestork.coderstat.MainActivity">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/myButton3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Кнопка"
android:layout_weight="1"
/>
</LinearLayout>
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
А в класс MainActivity добавляем setOnTouchListener(), в метод onCreate():
myButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
myTextView.setText("Вы нажали на кнопку :)");
}
return false;
}
});
Метод onTouch() содержит параметр MotionEvent, который позволяет настроить обработку в зависимости от касания.
ACTION_DOWN - событие касания по экрану (в данном случае кнопки).
ACTION_UP - соответственно срабатывает когда вы уберете палец с экрана (элемента).
Выведем в TextView информацию при нажатии на кнопку и отжатие:
myButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: myTextView.setText("Вы нажали на кнопку :)"); break;
case MotionEvent.ACTION_UP: myTextView.setText("Нажмите еще раз"); break;
}
return false;
}
});
Сохраняем, запускаем и пробуем.
Полный код класса MainActivity (MainActivity.java):
package com.firestork.coderstat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView myTextView;
Button myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.myTextView);
myButton = (Button) findViewById(R.id.myButton);
myButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: myTextView.setText("Вы нажали на кнопку :)"); break;
case MotionEvent.ACTION_UP: myTextView.setText("Нажмите еще раз"); break;
}
return false;
}
});
}
}
Дополнительно
Сделать кнопку недоступной
В классе MainActivity в методе onCreate() добавляем следующий код:
myButton.setEnabled(false);
Такой код пригодится, если необходимо выключить кнопку при определенных условиях.
Так же можно отключить кнопку в activity_main.xml с помощью атрибута android:enabled="false":
<Button
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Кнопка"
android:layout_weight="1"
android:enabled="false"
/>
Получить текст кнопки
Button myButton= (Button)view; String myButtonText = myButton.getText().toString(); myTextView.setText(myButtonText);
devreadwrite.com



Подборка адаптивных шаблонов для вашей CMS
Статьи по
Как получить и установить HTTPS сертификат на сайта

Комментарии
Какой кашмар - эта разработка под Андроид.. неужели не могут сделать простую IDE ? Зачем так мучать людей ?
ОтветитьРазработчик под Андроид всегда должен чувствовать боль))
ОтветитьПоооооочемуууууу????
ОтветитьЧто делать если вылезает: Unresolved reference v7, при попытке import android.support.v7.app.AppCompatActivity????
ОтветитьХорошо, а как сделать что бы когда я нажал(зажал) кнопку, у меня менялись значения?
ОтветитьЕсть кнопка increment i decrement, и мне лень каждый раз нажимать на кнопку. Хочу нажать раз, i increment мне увеличивал значения.
Привет от Тохи!
Ответить1) case MotionEvent.ACTION_DOWN: myTextView.setText("Вы нажали на кнопку :)"); break;
ОтветитьУ меня Андроид Студия ругается на setText ?!
error: non-static method setText(CharSequence) cannot be referenced from a static context
https://ru.stackoverflow.com/questions/728770/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-non-static-variable-this-cannot-be-referenced-from-a-static-context
Поэтому возникает ошибка “non-static variable this cannot be referenced from a static context”. Дословно: вы обращаетесь к нестатической переменной, но делаете это без уважения из статического контекста, и это не имеет смысла.
//
В моём случае чего надо делать, чтобы ошибка исчезла?
2) case MotionEvent.ACTION_DOWN: sounds.play(b7,1.0f,1.0f,1,0,1); return true;// break;
Если в конце строки стоит break, то программа вылетает, когда сделал return true; , то всё работает. В чём причина?
А как прописать, чтобы при нажатии на кнопку появлялась надпись из EditText? Для примера приложение «подписка», вводим имя и эл почту , нажимаем кнопку и выводится надпись «подписка оформлена на ИМЯ + Эл Почта»
ОтветитьПриветствую, подскажите как настроить два события на одну кнопку методом onClick?
ОтветитьА как насчёт обработки последовательных нажатий?
ОтветитьВ смысле, нажатие - действие,
повторное нажатие - возврат на исходную позицию?