1.如何進入頁面不focus任何view?
設置父布局
android:focusable="true"
android:focusableInTouchMode="true"
2.為何添加了測試庫,但扔import不到?
testCompile
androidTestCompile
在
buildTypes {
debuggable true
}
才生效
3.canvas.drawText垂直居中
參數(shù)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 時 未執(zhí)行并生成索引文件
@SupportedAnnotationTypes("org.greenrobot.eventbus.Subscribe")
@SupportedOptions(value = {"eventBusIndex", "verbose"})
public class EventBusAnnotationProcessor extends AbstractProcessor {
……
}
只有包含getSupportedAnnotationTypes類型的項目才會執(zhí)行AnnotationProcessor白筹,當前l(fā)ibrary并沒有使用@org.greenrobot.eventbus.Subscribe注解
9.個別機型點擊通知欄通知無法跳轉(zhuǎn)到APP
在設置中開啟權(quán)限
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的區(qū)別徒河?
readline的時候系馆,只有接收到換行符才能收到數(shù)據(jù)。
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簽名信息,執(zhí)行后會提示“輸入密鑰庫口令”
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中根據(jù)系統(tǒng)版本設置
@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加載網(wǎng)頁空白頁面,提示Uncaught SyntaxError: Unexpected xxxx
#不支持高級語法#
//不要用ajax
//不要使用 let
//箭頭函數(shù)
//等等
19.如何手動下載并引入庫
//
#生成目錄名稱
shasum {filePath}
#使用上一步生成的名稱name
.gradle/caches/modules-2/files-2.1/package-name/{項目名}/{版本}/{name}/xxxx.pom
參考 http://www.reibang.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+獲取不到藍牙信息
需添加權(quán)限ACCESS_FINE_LOCATION
25.查看當前頁面路徑
adb shell dumpsys activity | grep mFocusedActivity
26.解決RecyclerView中多個EditText無法長按復制粘貼的問題
//1.只看結(jié)果 >> pengboboer https://blog.csdn.net/pengbo6665631/article/details/97794784
//重寫adapter的此方法抢野,然后調(diào)用viewholder中的edittext的setEanble方法
@Override
public void onViewAttachedToWindow(SimpleViewHolder<PostPublishItem> holder) {
super.onViewAttachedToWindow(holder);
holder.editText.setEnable(false);
holder.editText.setEnable(true);
}
//2.分析原因 >> http://www.reibang.com/p/e334134a4ef7
prepareCursorControllers方法設置了mInsertionControllerEnabled
27.舊項目編譯問題
通常是gradle版本問題
可以到 https://gradle.org/releases/ 下載對應版本
放到 問題13的目錄里
28.日期格式化問題
Android 6.0(23)及以下系統(tǒng)
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參數(shù),替換為自定義的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.關閉通知權(quán)限無法顯示toast
Toast.show()方法內(nèi)部調(diào)用了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方法中判斷了開起了通知權(quán)限才會繼續(xù)執(zhí)行顯示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方法出現(xiàn)了無限循環(huán)小數(shù)
data1.divide(data2, n, BigDecimal.ROUND_UP)指定n位小數(shù)并 指定roundingMode