1.如何进入页面不focus任何view?
设置父布局
android:focusable="true"
android:focusableInTouchMode="true"
2.为何添加了测试库,但扔import不到?
testCompile
androidTestCompile
在
buildTypes {
debuggable true
}
才生效
3.canvas.drawText垂直居中
参数y为baseline
baseline = height - FontMetrics.bottom - FontMetrics.top
4. over bounds of view
setClipChildren
setClipToPadding
5.lineSpacing的版本兼容
TextView lineSpacing api<21 包含一行间距, api>=21不包含,需要通过value,value-21做兼容
6.指定abi编译
build.gradle
ndk {
abiFilters = []
abiFilters.addAll(ABI_FILTERS.split(';').collect{it as String})
}
gradle.properties
ABI_FILTERS=armeabi
7.VIVO adb install
gradle.properties
android.injected.testOnly = false
8.使用EventBus Subscriber Index 时 未执行并生成索引文件
@SupportedAnnotationTypes("org.greenrobot.eventbus.Subscribe")
@SupportedOptions(value = {"eventBusIndex", "verbose"})
public class EventBusAnnotationProcessor extends AbstractProcessor {
……
}
只有包含getSupportedAnnotationTypes类型的项目才会执行AnnotationProcessor,当前library并没有使用@org.greenrobot.eventbus.Subscribe注解
9.个别机型点击通知栏通知无法跳转到APP
在设置中开启权限
10.查看keystore信息
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
11.支持zip,rar,7z等格式文件使用APP打开
<intent-filter android:label="用zz漫画阅读">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/zip"/>
<data android:mimeType="application/x-rar-compressed"/>
<data android:mimeType="application/rar"/>
<data android:mimeType="application/x-7z-compressed"/>
<data android:mimeType="image/*"/>
</intent-filter>
12.socket中readline与read的区别?
readline的时候,只有接收到换行符才能收到数据。
13.Gradle依赖下载目录
#Mon Apr 24 10:55:41 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.2.1-all.zip
会下载到GRADLE_USER_HOME目录
.gradle/wrapper/dists/
遇到Failed to open zip file.
到.gradle/wrapper/dists/目录下,找到对应版本
通过distributionUrl直接下载下来zip包复制到对应版本目录下即可(删除已存在的zip包,大多情况是因为以前下载了一部分非完整的zip包导致打不开zip文件)
14.android studio 3.0打包
library中的buildTypes要和application中的一致
15.查看包名和签名
//查看apk签名信息
keytool -printcert -jarfile xxx.apk
//查看keystore签名信息,执行后会提示“输入密钥库口令”
keytool -list -v -keystore xxx.jks
keytool -list -v -keystore xxx.keystore
//查看apk包名
aapt dump badging xxx.apk
//aapt在/android-sdks/build-tools/28.0.3/下,28.0.3为build-tools版本
16.Only fullscreen opaque activities can request orientation
source:android-26(O)
解决办法1
去掉AndroidManifest中的screenOrientation,在onCreate中根据系统版本设置
@Override
protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT != Build.VERSION_CODES.O) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
条件:
targetSdkVersion > O
设置了screenOrientation
isTranslucentOrFloating == true
解决办法2
设置isFixedOrientation = false
设置isTranslucentOrFloating=false
protected void onCreate(@Nullable Bundle savedInstanceState) {
if (getApplicationInfo().targetSdkVersion > O && mActivityInfo.isFixedOrientation()) {
final TypedArray ta = obtainStyledAttributes(com.android.internal.R.styleable.Window);
final boolean isTranslucentOrFloating = ActivityInfo.isTranslucentOrFloating(ta);
ta.recycle();
if (isTranslucentOrFloating) {
throw new IllegalStateException(
"Only fullscreen opaque activities can request orientation");
}
}
}
//windowIsTranslucent,windowSwipeToDismiss,windowIsFloating返回true
public static boolean isTranslucentOrFloating(TypedArray attributes) {
final boolean isTranslucent =
attributes.getBoolean(com.android.internal.R.styleable.Window_windowIsTranslucent,
false);
final boolean isSwipeToDismiss = !attributes.hasValue(
com.android.internal.R.styleable.Window_windowIsTranslucent)
&& attributes.getBoolean(
com.android.internal.R.styleable.Window_windowSwipeToDismiss, false);
final boolean isFloating =
attributes.getBoolean(com.android.internal.R.styleable.Window_windowIsFloating,
false);
return isFloating || isTranslucent || isSwipeToDismiss;
}
17.360加固配置多个签名时如何选择签名的?
//360加固配置多个签名时会自动选择加固前签名完成自动签名
18.Android 5.1 webview加载网页空白页面,提示Uncaught SyntaxError: Unexpected xxxx
#不支持高级语法#
//不要用ajax
//不要使用 let
//箭头函数
//等等
19.如何手动下载并引入库
//
#生成目录名称
shasum {filePath}
#使用上一步生成的名称name
.gradle/caches/modules-2/files-2.1/package-name/{项目名}/{版本}/{name}/xxxx.pom
参考 https://www.jianshu.com/p/5c475b95a819
20.使用ScrollView时键盘遮盖输入框
把ScrollView改用NestedScrollView
21.设置了android:windowSoftInputMode="adjustPan"但未生效
//代码设置
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
22. getDimension, getDimensionPixelOffset, getDimensionPixelSize
//return 10.4
float getDimension()
TypedValue.complexToDimension
//return 10
int getDimensionPixelOffset()
TypedValue.complexToDimensionPixelOffset
//return 11
int getDimensionPixelSize()
TypedValue.complexToDimensionPixelSize
23.微信分享时提示“签名不对,请检查签名是否与开放平台上填写的一致。”
1.签名信息取md5值
2.杀掉微信,重试
24.android 29+获取不到蓝牙信息
需添加权限ACCESS_FINE_LOCATION
25.查看当前页面路径
adb shell dumpsys activity | grep mFocusedActivity
26.解决RecyclerView中多个EditText无法长按复制粘贴的问题
//1.只看结果 >> pengboboer https://blog.csdn.net/pengbo6665631/article/details/97794784
//重写adapter的此方法,然后调用viewholder中的edittext的setEanble方法
@Override
public void onViewAttachedToWindow(SimpleViewHolder<PostPublishItem> holder) {
super.onViewAttachedToWindow(holder);
holder.editText.setEnable(false);
holder.editText.setEnable(true);
}
//2.分析原因 >> https://www.jianshu.com/p/e334134a4ef7
prepareCursorControllers方法设置了mInsertionControllerEnabled
27.旧项目编译问题
通常是gradle版本问题
可以到 https://gradle.org/releases/ 下载对应版本
放到 问题13的目录里
28.日期格式化问题
Android 6.0(23)及以下系统
Caused by: java.lang.IllegalArgumentException: Unknown pattern character 'X'
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
sdf.format(new Date());
time zone sdk 24+
z:GMT-08:00
Z:-0800
X:-08, -0800, -08:00
time zone sdk 23-
Z/ZZ/ZZZ:-0800
ZZZZ:GMT-08:00
ZZZZZ:-08:00
29.Android 7.1(25) Toast 崩溃BadTokenException
可以通过反射拿到TN的mHandler参数,替换为自定义的mHandler,自定义mHandler中catch到BadTokenException错误。
官方修复
Android O (API Level 26) 使用try catch解决
//Toast.java
public void handleShow(IBinder windowToken) {
...
try {
mWM.addView(mView, mParams);
trySendAccessibilityEvent();
} catch (WindowManager.BadTokenException e) {
/* ignore */
}
...
}
30.关闭通知权限无法显示toast
Toast.show()方法内部调用了NotificationManagerService. enqueueToast()
public void show() {
if (mNextView == null) {
throw new RuntimeException("setView must have been called");
}
INotificationManager service = getService();
String pkg = mContext.getOpPackageName();
TN tn = mTN;
tn.mNextView = mNextView;
try {
service.enqueueToast(pkg, tn, mDuration);
} catch (RemoteException e) {
// Empty
}
}
enqueueToast方法中判断了开起了通知权限才会继续执行显示toast功能
public void enqueueToast(String pkg, ITransientNotification callback, int duration)
{
if (ENABLE_BLOCKED_TOASTS && !isSystemToast &&
(!areNotificationsEnabledForPackage(pkg, Binder.getCallingUid())
|| isPackageSuspended)) {
Slog.e(TAG, "Suppressing toast from package " + pkg
+ (isPackageSuspended
? " due to package suspended by administrator."
: " by user request."));
return;
}
}
Toast的显示时长也是在NotificationManagerService里定义的。
LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT =3.5s
SHORT_DELAY = 2s
31.Android Studio 3.5升级后,Reformat Code操作导致布局错乱的问题
a.打开Preferences...
a.搜索Code Style XML
a.找到 Set from...
b.选择Predefined Styled-Android
c.保存
21.Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
Android Studio 4.2.0以下版本,自带的jdk 1.8
Android Studio 4.2.0及以上版本,自带的jdk 11
Project Structure的SDK Location中指定jdk1.8版本路径(自行安装sdk1.8)
22.Android Studio快捷键设置
22.android-parcelable-intellij-plugin不支持androidStudio4.1+
https://github.com/mcharmas/android-parcelable-intellij-plugin/issues/75
23.Non-terminating decimal expansion; no exact representable decimal result
BigDecimal的divide方法出现了无限循环小数
data1.divide(data2, n, BigDecimal.ROUND_UP)指定n位小数并 指定roundingMode