Одним из часто используемых элементов являются кнопки, которые представлены классом android.widget.Button. Ключевой особенностью кнопок является возможность взаимодействия с пользователем через нажатия.
Некоторые ключевые атрибуты, которые можно задать у кнопок:
text
: задает текст на кнопке
textColor
: задает цвет текста на кнопке
background
: задает фоновый цвет кнопки
textAllCaps
: при значении true устанавливает текст в верхнем регистре. По умолчанию как раз и применяется значение true
onClick
: задает обработчик нажатия кнопки
Итак, изменим код в activity_main.xml следующим образом:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="wrap_content" android:textSize="34sp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> <EditText android:id="@+id/editText" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="Введите имя" app:layout_constraintTop_toBottomOf="@+id/textView" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ввод" android:onClick="sendMessage" app:layout_constraintTop_toBottomOf="@+id/editText" app:layout_constraintLeft_toLeftOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
При помощью атрибута android:onClick
можно задать метод в коде java, который будет обрабатывать нажатия кнопки. Так,
в вышеприведенном примере это метод sendMessage
. Теперь перейдем к коду MainActivity и пропишем в нем такой метод:
package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // Обработка нажатия кнопки public void sendMessage(View view) { TextView textView = findViewById(R.id.textView); EditText editText = findViewById(R.id.editText); textView.setText("Добро пожаловать, " + editText.getText()); } }
При создании метода обработки нажатия следует учитывать следующие моменты:
Метод должен объявляться с модификатором public
Должен возвращать значение void
В качестве параметра принимать объект View
. Этот объект View и представляет собой нажатую кнопку
В данном случае после нажатия на кнопку в TextView выводится текст из EditText.
Аналогичный пример полностью в коде MainActivity:
package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { EditText editText; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); ConstraintLayout constraintLayout = new ConstraintLayout(this); textView = new TextView(this); textView.setId(View.generateViewId()); ConstraintLayout.LayoutParams textViewLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, ConstraintLayout.LayoutParams.WRAP_CONTENT ); textViewLayout.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; textViewLayout.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; textViewLayout.rightToRight = ConstraintLayout.LayoutParams.PARENT_ID; textView.setLayoutParams(textViewLayout); constraintLayout.addView(textView); editText = new EditText(this); editText.setId(View.generateViewId()); editText.setHint("Введите имя"); ConstraintLayout.LayoutParams editTextLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, ConstraintLayout.LayoutParams.WRAP_CONTENT ); editTextLayout.topToBottom = textView.getId(); editTextLayout.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; editTextLayout.rightToRight = ConstraintLayout.LayoutParams.PARENT_ID; editText.setLayoutParams(editTextLayout); constraintLayout.addView(editText); Button button = new Button(this); button.setText("Ввод"); ConstraintLayout.LayoutParams buttonLayout = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT ); buttonLayout.topToBottom = editText.getId(); buttonLayout.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; button.setLayoutParams(buttonLayout); constraintLayout.addView(button); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Обработка нажатия textView.setText("Добро пожаловать, " + editText.getText()); } }); setContentView(constraintLayout); } }
При программном создании кнопки мы можем определить у нее слушатель нажатия View.OnClickListener и с помощью его метода onClick также обработать нажатие:
button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Обработка нажатия } });