可以帮我写一个功能齐全的android的带焦点处理的baseActivity抽象类
时间: 2023-05-11 17:02:28 浏览: 147
android简单封装好的baseactivity
5星 · 资源好评率100%
当然可以,以下是一个功能齐全的带焦点处理的baseActivity抽象类的示例代码:
```java
public abstract class BaseActivity extends AppCompatActivity {
private boolean isPaused = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
initView();
}
@Override
protected void onResume() {
super.onResume();
isPaused = false;
}
@Override
protected void onPause() {
super.onPause();
isPaused = true;
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (!isPaused) {
View v = getCurrentFocus();
if (v instanceof EditText) {
int[] l = {0, 0};
v.getLocationInWindow(l);
int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth();
if (ev.getX() > left && ev.getX() < right && ev.getY() > top && ev.getY() < bottom) {
// 点击的是EditText区域,保留焦点
return super.dispatchTouchEvent(ev);
} else {
// 点击的是其他区域,隐藏键盘
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
v.clearFocus();
return true;
}
}
}
return super.dispatchTouchEvent(ev);
}
protected abstract int getLayoutId();
protected abstract void initView();
}
```
这个抽象类继承自 AppCompatActivity,实现了带焦点处理的功能。在 onResume 和 onPause 方法中,我们记录当前 Activity 是否处于暂停状态。在 dispatchTouchEvent 方法中,我们判断当前点击的区域是否是 EditText 区域,如果是,则保留焦点;如果不是,则隐藏键盘并清除焦点。这样就可以实现带焦点处理的功能了。
阅读全文