如何自定义AppCompatActivity类以封装全局通用功能?
自定义通用AppCompatActivity基类(含全局常用功能)
下面是一个封装了隐藏软键盘、进度条控制等全局通用功能的BaseActivity,所有业务页面都可以继承这个类来复用功能:
import android.app.ProgressDialog import android.content.Context import android.os.Bundle import android.view.View import android.view.inputmethod.InputMethodManager import android.widget.ProgressBar import androidx.appcompat.app.AppCompatActivity open class BaseActivity : AppCompatActivity() { // 布局内嵌进度条实例 private var loadingProgressBar: ProgressBar? = null // Dialog式进度条实例 private var progressDialog: ProgressDialog? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 可在此添加全局初始化逻辑,比如统一状态栏样式、全局主题配置等 } /** * 针对指定View隐藏软键盘 */ fun hideKeyboard(view: View?) { view?.let { val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(it.windowToken, 0) } } /** * 全局隐藏软键盘(无需传入View) */ fun hideKeyboard() { val targetView = currentFocus ?: window.decorView.rootView hideKeyboard(targetView) } /** * 显示布局内嵌式进度条 * 要求布局中存在id为loading_progress的ProgressBar */ fun showProgress() { if (loadingProgressBar == null) { loadingProgressBar = findViewById(R.id.loading_progress) } loadingProgressBar?.visibility = View.VISIBLE } /** * 隐藏布局内嵌式进度条 */ fun hideProgress() { loadingProgressBar?.visibility = View.GONE } /** * 显示Dialog式进度条,支持自定义提示文字 */ fun showProgressDialog(message: String = "加载中...") { if (progressDialog == null) { progressDialog = ProgressDialog(this).apply { setCancelable(false) setMessage(message) } } progressDialog?.show() } /** * 隐藏Dialog式进度条 */ fun hideProgressDialog() { progressDialog?.dismiss() } // ------------------- 额外通用工具方法(可选) ------------------- /** * 快捷显示Toast提示 */ fun showToast(message: String) { android.widget.Toast.makeText(this, message, android.widget.Toast.LENGTH_SHORT).show() } /** * 销毁时清理资源,避免内存泄漏 */ override fun onDestroy() { super.onDestroy() progressDialog?.let { if (it.isShowing) it.dismiss() progressDialog = null } loadingProgressBar = null } }
使用说明:
- 业务Activity直接继承
BaseActivity即可,比如class MainActivity : BaseActivity() - 隐藏软键盘:调用
hideKeyboard()(全局隐藏)或hideKeyboard(editText)(针对指定输入框) - 进度条控制:
- 布局内嵌式:确保布局中有
android:id="@+id/loading_progress"的ProgressBar,调用showProgress()/hideProgress() - Dialog式:直接调用
showProgressDialog("加载数据中")/hideProgressDialog()
- 布局内嵌式:确保布局中有
- 可直接使用
showToast()方法快速显示提示,减少重复代码
注意事项:
- 如果使用ViewBinding,可将
loadingProgressBar的初始化替换为Binding对象的引用,避免findViewById的空指针风险 ProgressDialog属于过时API,若需自定义样式,可自行实现Dialog替代- 若在Fragment中调用软键盘隐藏方法,可在BaseFragment中封装同名方法,或通过
activity as BaseActivity调用基类方法
内容的提问来源于stack exchange,提问作者user2357113
相关产品推荐
相关产品推荐

