【Android studio】 隐藏工具栏,键盘
前言
本博文主要是对隐藏工具栏和键盘需求实现的一个介绍,以及记录,方便后续使用时候可以直接加载。
工具栏隐藏
继承AppCompatActivity
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
继承Activity
requestWindowFeature(Window.FEATURE_NO_TITLE)
键盘隐藏
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View view = getCurrentFocus();
if (isHideInput(view, ev)) {
HideSoftInput(view.getWindowToken());
view.clearFocus();
}
}
return super.dispatchTouchEvent(ev);
}
/**
* 判定是否需要隐藏
*/
private boolean isHideInput(View v, MotionEvent ev) {
if (v != null && (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) {
return false;
} else {
return true;
}
}
return false;
}
/**
* 隐藏软键盘
*/
private void HideSoftInput(IBinder token) {
if (token != null) {
InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
manager.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
}
}
额外补充
需求实现部分就先到这!接下来,是一些个人平时整理的c++要点概要,如有需要可以进行阅读!
指针与引用的区分
- 指针是一个变量, 只不过这个变量存储的是一个地址, 指向内存的一个存储单元; 而引用跟原来的变量实质上是同一个东西, 只不过是原变量的一个别名而已。 引用没有自己的内存空间, 但指针有自己的内存空间。
- 指针的值可以为空, 也可能指向一个不确定的内存空间, 但是引用的值不能为空, 并且引用在定义的时候必须初始化为特定对象; (因此引用更安全)。
即: 空值 NULL 不能引用, 而指针可以指向 NULL; 引用必须在声明时初始化, 而指针不用。 - 引用声明后, 引用的对象不可改变, 对象的值可以改变, 指针可以随时改变指向的对象以及对象的值。
- 指针和引用的自增(++)运算意义不一样。
文件打开形式设定
编译特点
- 预处理命令行可以出现在源程序的任何位置上。
- 源程序的一行上只能出现一条预处理命令。
- 宏名只要是符合要求的标识符都可以, 没有规定一定要大写。
- 宏替换在程序编译时, 就由编译程序对出现的宏名进行了相应的宏替换, 因此宏替换不占用程序的运行时间。
虚函数
- 友元函数不能是虚函数, 因为友元函数不可以继承, 对于没有继承特性的函数, 因而是没有虚函数。 但是虚函数可以是另一个类的友元函数, 但不能是静态成员函数;
- 如果一个类有纯虚函数, 则该类称为抽象类, 是不能实例化的。 所以派生类要实例化, 必须对纯虚函数进行实现;
- 基类中说明了虚函数后, 派生类中对应的函数也默认是虚函数, 可以不用加 virtual 进行说明, 为增强可读性, 通常在派生类中也加入 virtual 关键字。
构造函数不能声明为虚函数, 析构函数可以声明为虚函数, 而且有时是必须声明为虚函数。
构造函数为什么不能声明为虚函数?
答:
- 构造一个对象的时候, 必须知道对象的实际类型, 而虚函数行为是在运行期间确定实际类型的。 而在构造一个对象时, 由于对象还未构造成功。 编译器无法知道对象的实际类型是该类本身, 还是该类的一个派生类, 或是更深层次的派生类,无法确定。
- 虚函数的执行依赖于虚函数表。 而虚函数表在构造函数中进行初始化工作, 即初始化 vptr,让他指向正确的虚函数表。 而在构造对象期间, 虚函数表还没有被初始化, 将无法进行。 析构函数执行时先调用派生类的析构函数, 其次才调用基类的析构函数。
析构函数为什么声明为虚函数?
答:如果析构函数不是虚函数, 而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用 delete 销毁对象时, 只调用了基类的析构函数, 未调用派生类的析构函数。 这样会造成销毁对象不完全。