06 控件与事件¶
界面由控件组成,交互由"事件"驱动。本章过一遍最常用控件 + 事件写法。
6.1 常用控件速查¶
| 控件 | 作用 | 关键方法 |
|---|---|---|
| TextView | 显示文字 | setText() / getText() |
| EditText | 输入框 | getText().toString()、setText()、setHint() |
| Button / MaterialButton | 按钮 | 配合点击监听 |
| ImageView | 显示图片 | setImageResource(R.drawable.xx) |
| CheckBox | 多选 | isChecked() |
| Switch | 开关 | isChecked() + 监听 |
| ProgressBar | 进度/加载圈 | setVisibility() 控制显隐 |
| RecyclerView | 列表(第 8 章) | — |
6.2 找到控件:findViewById¶
TextView tv = findViewById(R.id.tvTitle);
tv.setText("新标题");
EditText et = findViewById(R.id.etName);
String name = et.getText().toString();
6.3 点击事件:三种写法¶
写法一:匿名内部类(最常用)
Button btn = findViewById(R.id.btnOk);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 点击后执行
Toast.makeText(this, "被点了", Toast.LENGTH_SHORT).show();
}
});
写法二:Lambda(Java 8+,更简洁)
btn.setOnClickListener(v -> Toast.makeText(this, "被点了", Toast.LENGTH_SHORT).show());
写法三:Activity 实现接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btnOk).setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btnOk) {
// 处理
}
}
}
多个按钮共用一个监听时写法三最省事。
6.4 其他常见事件¶
// 长按
btn.setOnLongClickListener(v -> { Toast.makeText(this, "长按", Toast.LENGTH_SHORT).show(); return true; });
// EditText 回车/输入监听
et.setOnEditorActionListener((v, actionId, event) -> { /* 处理 */ return false; });
// 文本变化监听
et.addTextChangedListener(new android.text.TextWatcher() {
@Override public void beforeTextChanged(CharSequence s, int a, int b, int c) {}
@Override public void onTextChanged(CharSequence s, int a, int b, int c) {
// 每输入一个字符都会触发
}
@Override public void afterTextChanged(android.text.Editable s) {}
});
// Switch 开关变化
Switch sw = findViewById(R.id.sw);
sw.setOnCheckedChangeListener((buttonView, isChecked) -> {
// isChecked 即开关状态
});
6.5 Toast 与 Snackbar¶
// Toast:短暂悬浮提示
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
// Snackbar:Material 风格底部提示(需要 CoordinatorLayout 容器)
com.google.android.material.snackbar.Snackbar.make(view, "删除成功", Snackbar.LENGTH_SHORT).show();
6.6 输入法相关小技巧¶
// 强制弹出键盘
android.view.inputmethod.InputMethodManager imm =
(android.view.inputmethod.InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.showSoftInput(etInput, 0);
// 收起键盘
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
本章练习:做一个"用户名 + 密码 + 登录按钮"界面,点登录后用 Toast 把输入内容打出来。