Android 学习笔记-知识点(二)
2016-08-18 本文已影响221人
zgsHighwin
- 以下的一些是知识点是平时在开发的过程中遇到的一些知识点,总结起来,目的是提高自己的水平,由于本人开发时间不长,有些知识点可能过于的简单,但是好记性不如烂笔头,如果有错误的地方请指正,谢谢。
EditText设置打开的时候默认的输入状态
默认中文打开输入中文状态和英文输入状态
在代码中,inputtype的属性必须设置在singleline的后面
/**
* 打卡软键盘
*
* @param mEditText 输入框
* @param mContext 上下文
*/
public static void openKeybord(EditText mEditText, Context mContext) {
InputMethodManager imm = (InputMethodManager) mContext
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,
InputMethodManager.HIDE_IMPLICIT_ONLY);
}
/**
* 关闭软键盘
*
* @param activity
*/
public static void closeKeybord(Activity activity) {
final View v = activity.getWindow().peekDecorView();
if (v != null && v.getWindowToken() != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
监听输入法的内容变化是edittext.addTextChangedListener
监听输入法的回车按钮是edittext.setOnKeyListener,判断的条件为
其中keycode可以是软键盘上的任何键
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
//点击回车时并弹起
return true;
}
return false;
}
});
Context实例.png
Activity之间传递数据的几种方式.png
关于VIew id的问题
view id.png这两个方法的实现可参考,并且要保存状态的View要有唯一的id而且在View初始化的
时候要调用setSaveEnabled(true);才能在New view 创建一个实例的时候调用
onSavedStateInstance 的方法
Paste_Image.png
如何判断Activity是销毁的
If(acitivity== null||activity.isDestroyed()||activity.isFinishing()){
//google工程师判断Activity是否是销毁的多了一个ondestroyed的判断
}
Service的onCreate是在主线程中调用的,耗时操作会阻塞UI,处理方法有多种,可以使用线程,handler,intentService
android:animateLayoutChanges="true"
在父View设置这样一个属性,子View 设置Gone和Visible会有一个动画效果
在RecyclerView和ListView中设置android:clipToPadding可以只设置第一项距离项端的距离
即android:clicpToPadding = “false” android:paddingTop = “10dp”
ArgbEvaluate用于计算不同颜色之间的插值,有一个平滑的过度过程
Android 可能由于服务器问题闪退,三闪闪退以上可能是由于数据已经被存放起来,需要将数据清除掉
去除系统闪退的弹出框,其中UnCaughExceptionHandler中不能打开一个新的线程,诸如错误上报的问题
上传服务器的问题只能采用同步的方式,但是效果可能会比较的慢,但是可以将错误的信息保存到Sp中
UnCaughExceptionHandler.png
EditTex的setSelection是设置edittext光标的位置
RandomAccessFile使用这个类可以在指定的位置添加一些内容。
我们需要谨记的原则就是:不要在任何非UI线程里面去持有UI对象的引用。
Runtime.getRuntime().availableProcesser()方法并不可靠,他返回的值并不是真实的CPU核心数,因为CPU
会在某些情况下选择对部分核心进行睡眠处理,在这种情况下,返回的数量就只能是激活的CPU核心数。
BroadCast和localBroadManager的区别.png
线程优先级.png
可以为线程设置优先级
设置优先级.png
有必要去看一下的Android 源码.png
多渠道打包
就是发布到不同渠道的包,比如你看很多小米商店下载的app,启动页会有小米商城的logo。
Java8 ::用来引用的是构造方法和静态的方法
Java8的Effectively final 特性.png
按键或触摸事件5s,广播处理10秒,服务20秒可能会出现anr
Manifest中设置了screenOrientation在Activity中设置onConfituration的方法不会被调用
限制输入的时候可以使用注解的方式,用枚举的本质还是创建对象
作用注解的方式来代替枚举.png
Application注意事项.png
画笔设置设置阴影
paint.setShadowLayer(4, 2, 2, 0x80000000);
***
Handler.post(r) 实现是工作在ui线程,这只是执行了runnable里面的run方法,并没有执行start的方法。
Handler.png HandlerThread.pngIntentService.png
手机的开发者选项里面的(窗口动画绽放,过渡动画缩放,动画程序时长缩放)分别对应以下的三个动画绽放
"Window animation scale",作用于非Activity窗口。比如,Dialog、toast、自定义浮窗、输入法等窗口都是该选项的作用目标
"Transition animation scale",作用于Activity窗口。Activity窗口是该选项作用目标
"Animator duration scale",作用于View。比如View属性动画、水波纹背景动画等
如果包名相同的情况下,可以采用这种方式来写
SupportLiVersion.png
ViewStub的使用方法
<ViewStub
android:id="@+id/vsHeader"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inflatedId="@+id/header"
android:layout="@layout/header" />
其中inflatedId是在获取到ViewStub中实际View的id
stub = (ViewStub) findViewById(R.id.vsHeader);
View inflated = stub.inflate();
View view = inflated.findViewById(R.id.header);
inflated = view //true
所以拿inflated.findViewById()和view.findViewById()的结果是一样的
代码中也可以这种方式添加
ViewStub stub = new ViewStub(this);
stub.setLayoutResource(R.layout.header);
stub.inflate();
把底部的EditText弹出在软键盘的上方
<activity android:windowSoftInputMode="adjustPan">
不能在application中做一些缓存数据的操作,如果当前app从后能切到前台的过程这前,系统可能会对application中的数据做一些清理的工作,导置在切到前台的过程中导致应用程序崩溃。
Android 数据库升级的过程中会将数据库中的数据信息清除掉,升级过后能会导置应用程序崩溃,解决的办法是升级的时候做数据的保存,在拷贝数据到高的版本中