跳转至

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 把输入内容打出来。

🏠 返回总站