Одним из часто используемых элементов являются кнопки, которые представлены классом 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) {
// Обработка нажатия
}
});