记录一些代码小细节
1.Android 启动页android.intent.action.MAIN,启动模式不能设置为singleTask
这样会使你每次回到手机主页,再次进入APP,回到启动页。
如果真的要将之前的启动页设置singleTask。可以将启动页换成一张空白页。
空白页上直接调转到之前的启动页上。
例子:我之前的启动页是一张登录页面。登录页面需要将启动模式设置为singleTask.
所以当前启动页设置为空白页,直接跳转到登录页,登录页的启动模式还是设置singleTask,这样就不会出错了
2.关于文件读取问题
先排除文件过大,文件不存在和读取权限问题。
然后接下来就是Api29Q版本的问题了。问题有以下2 个:
open failed: EACCES (Permission denied)和BitmapFactory.decodeFile问题 。
因为N版本文件的读取方式发生了改变,如果想继续使用原先的方式读取。在AndroidManifest.xml加入以下代码:
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
参考网址:Android Q(10.0 API29)版本新特性和兼容性适配
3.关于Http和Https的问题
这个也是Api27P版本之后的问题。27版本之后如果不经过特殊处理,网络方式必须是https
但也有方式在高版本使用http。
先在res文件中创建xml目录,然后在其下创建xml文件。文件内容以下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
最后在AndroidManifest.xml加入以下代码:
<application
...
android:networkSecurityConfig="@xml/network_security_config" />
参考网址:网络请求http/https问题
4.关于连续点击Toast不显示问题
if (toast == null) {
toast = Toast.makeText(mContext, s, Toast.LENGTH_SHORT);
} else {
//解决连续点击toast不显示问题
toast.cancel();
toast = Toast.makeText(mContext, s, Toast.LENGTH_SHORT);
}
toast.show();
5.关于使用AndroidAutoSize后,系统的复制粘贴,显示的特别小的问题
关于这个问题,官方推荐是使用副单位。如果在已经成型的项目里,这个方法不可行。然后我就找到了折中的方法。
先在弹出复制粘贴弹窗的时候取消适配,然后在点击屏幕的时候确定适配。
isCancleAdapter 判断是否取消适配
edText.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
//取消适配
AutoSize.cancelAdapt((Activity) mContext);
isCancleAdapter = true;
}
});
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
//点击屏幕,如果有点击适配的时候,才去重新适配
if (isCancleAdapter){
AutoSize.autoConvertDensityOfGlobal((Activity) mContext);
isCancleAdapter = false;
}
return super.dispatchTouchEvent(ev);
}
未完待续。。。