Activity的Base基类
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import com.blankj.utilcode.util.ActivityUtils
import com.gyf.immersionbar.ImmersionBar
import kotlin.collections.ArrayList
/*
*
* base基类
* */
abstract class BaseActivity : AppCompatActivity() {
init {
//防止快速点击
// 两次点击按钮之间的点击间隔不能少于1000毫秒
val MIN_CLICK_DELAY_TIME = 1000;
var lastClickTime: Long? = null
fun isFastClick(): Boolean {
var flag = false;
var curClickTime = System.currentTimeMillis();
if ((curClickTime - lastClickTime!!) >= MIN_CLICK_DELAY_TIME) {
flag = true;
}
lastClickTime = curClickTime;
return flag;
}
//隐藏软键盘
fun hideSoftInput() {
var imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
if (currentFocus != null) {
imm.hideSoftInputFromWindow(currentFocus?.windowToken, 0);
}
}
}
var context: Context? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
try {
setContentView(getLayout())
} catch (e: Exception) {
e.message
}
//初始化上下文
context = application
//初始化控件
initView()
//初始化数据
initData()
}
//初始化布局
abstract fun getLayout(): Int
abstract fun initView()
abstract fun initData()
//点击空白地方隐藏软键盘
open fun hideKeyboard(
event: MotionEvent, view: View?,
activity: Activity
) {
try {
if (view != null && view is EditText) {
val location = intArrayOf(0, 0)
view.getLocationInWindow(location)
val left = location[0]
val top = location[1]
val right = (left
+ view.getWidth())
val bootom = top + view.getHeight()
// 判断焦点位置坐标是否在空间内,如果位置在控件外,则隐藏键盘
if (event.rawX < left || event.rawX > right || event.y < top || event.rawY > bootom
) {
// 隐藏键盘
val token = view.getWindowToken()
val inputMethodManager = activity
.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(
token,
InputMethodManager.HIDE_NOT_ALWAYS
)
}
}
} catch (e: java.lang.Exception) {
e.printStackTrace()
}
}
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
when (ev.action) {
MotionEvent.ACTION_DOWN -> {
val view: View? = currentFocus
hideKeyboard(ev, view, this) //调用方法判断是否需要隐藏键盘
}
else -> {
}
}
return super.dispatchTouchEvent(ev)
}
//页面跳转
open fun activityStart(ctx: Context, clazz: Class<Any>) {
var intent = Intent()
intent.setClass(ctx, clazz)
startActivity(intent)
overridePendingTransition(0, 0)
}
}
Fragment的Base基类
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
/**
*
* baseFragment
*/
abstract class BaseFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
var view=inflater.inflate(getLayout(), container, false)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//加载控件
initView()
//加载数据
initData()
}
//初始化布局
abstract fun getLayout(): Int
abstract fun initView()
abstract fun initData()
}
以上只是我根据项目简单罗列出来的 大家要是有更好的可以在评论区留言互动哈