From cc4b5a3e6cb010d12c4445cd456ebcee529613e0 Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 11:05:22 +0800 Subject: [PATCH 001/192] Add README-zh.md --- README-zh.md | 150 +++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 1 + 2 files changed, 151 insertions(+) create mode 100644 README-zh.md diff --git a/README-zh.md b/README-zh.md new file mode 100644 index 0000000..f64fccb --- /dev/null +++ b/README-zh.md @@ -0,0 +1,150 @@ +![Logo](art/autosize_banner.jpg) + +

+ + Latest Stable Version + + + Build Status + + + Min Sdk Version + + + License + + + Author + + + QQ Group + +

+ + +## 今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案. + + +## Overview +### Pixel 2 XL | 1440 x 2880 | 560dpi: +

+ + + +

+ +### Pixel XL | 1440 x 2560 | 560dpi: +

+ + + +

+ +### Nexus 5X | 1080 x 1920 | 420dpi: +

+ + + +

+ +### Nexus 4 | 768 x 1280 | 320dpi: +

+ + + +

+ +### Nexus S | 480 x 800 | 240dpi: +

+ + + +

+ +## Notice +* [主流机型设备信息,可以作为参考](https://material.io/tools/devices/) + +* [原理分析](https://juejin.im/post/5b7a29736fb9a019d53e7ee2) + +* 对于老项目的使用,**AndroidAutoSize** 可以和 [**AndroidAutoLayout**](https://github.com/hongyangAndroid/AndroidAutoLayout) 一起使用,因为 **AndroidAutoLayout** 使用的 **px**,所以对它不会有影响,如果某些老项目的某些页面之前使用了 **dp** 进行布局,并且 **AndroidAutoSize** 对这些页面产生了不良影响,可以让之前使用了 **dp** 的旧 **Activity**,实现 **CancelAdapt** 取消适配 + +## Download +``` gradle + implementation 'me.jessyan:autosize:0.7.0' +``` + +## Usage (只需要这一步框架就可以运行) +### Step 1 +* **请在 AndroidManifest 中填写全局设计图尺寸 (单位 dp)** +```xml + + + + + + +``` + +## Advanced (以下用法不懂?答应我,认真看 Demo 好不好?) + +* **当某个页面的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数** +```java +public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt { + + @Override + public boolean isBaseOnWidth() { + return false; + } + + @Override + public float getSizeInDp() { + return 667; + } +} + +``` + +* **当某个页面想放弃适配,请实现 CancelAdapt 接口** +```java +public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt { + +} + +``` + +## ProGuard +``` + -keep class me.jessyan.autosize.** { *; } + -keep interface me.jessyan.autosize.** { *; } +``` + + +## Donate +![alipay](https://raw.githubusercontent.com/JessYanCoding/MVPArms/master/image/pay_alipay.jpg) ![](https://raw.githubusercontent.com/JessYanCoding/MVPArms/master/image/pay_wxpay.jpg) + +## About Me +* **Email**: +* **Home**: +* **掘金**: +* **简书**: + +## License +``` + Copyright 2018, jessyan + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +``` diff --git a/README.md b/README.md index 660ba6d..201d37e 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ ## A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案). +[中文说明](README-zh.md) ## Overview ### Pixel 2 XL | 1440 x 2880 | 560dpi: From f813dbcf2cfca4c3933aa09aabd389e7cb4df6fb Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 11:09:29 +0800 Subject: [PATCH 002/192] Update README-zh.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 201d37e..c11f5ab 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,11 @@ ## A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案). -[中文说明](README-zh.md) +

+ + 中文说明 + +

## Overview ### Pixel 2 XL | 1440 x 2880 | 560dpi: From a8587ebff53e24d83aea474dccacb77ec4e2b591 Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 11:12:00 +0800 Subject: [PATCH 003/192] Update README-zh.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c11f5ab..47d60de 100644 --- a/README.md +++ b/README.md @@ -21,15 +21,14 @@

- -## A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案). -

中文说明

+## A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案). + ## Overview ### Pixel 2 XL | 1440 x 2880 | 560dpi:

From 32a39123385abf8f34283e7b997d3dffb3335bef Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 11:41:02 +0800 Subject: [PATCH 004/192] Update README-zh.md --- README-zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index f64fccb..ea6d1ea 100644 --- a/README-zh.md +++ b/README-zh.md @@ -66,7 +66,7 @@ * [原理分析](https://juejin.im/post/5b7a29736fb9a019d53e7ee2) -* 对于老项目的使用,**AndroidAutoSize** 可以和 [**AndroidAutoLayout**](https://github.com/hongyangAndroid/AndroidAutoLayout) 一起使用,因为 **AndroidAutoLayout** 使用的 **px**,所以对它不会有影响,如果某些老项目的某些页面之前使用了 **dp** 进行布局,并且 **AndroidAutoSize** 对这些页面产生了不良影响,可以让之前使用了 **dp** 的旧 **Activity**,实现 **CancelAdapt** 取消适配 +* 对于老项目的使用,**AndroidAutoSize** 可以和 [**AndroidAutoLayout**](https://github.com/hongyangAndroid/AndroidAutoLayout) 一起使用,因为 **AndroidAutoLayout** 使用的是 **px**,所以对它不会产生任何影响,如果老项目的某些页面之前使用了 **dp** 进行布局,并且 **AndroidAutoSize** 对这些页面已经产生了不良影响,可以让之前使用了 **dp** 的旧 **Activity** 实现 **CancelAdapt** 取消适配 ## Download ``` gradle From 7af25b6cf47ff964e6228919a9900efe7ec5d356 Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 11:47:02 +0800 Subject: [PATCH 005/192] Update README-zh.md --- README-zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index ea6d1ea..f330dc5 100644 --- a/README-zh.md +++ b/README-zh.md @@ -66,7 +66,7 @@ * [原理分析](https://juejin.im/post/5b7a29736fb9a019d53e7ee2) -* 对于老项目的使用,**AndroidAutoSize** 可以和 [**AndroidAutoLayout**](https://github.com/hongyangAndroid/AndroidAutoLayout) 一起使用,因为 **AndroidAutoLayout** 使用的是 **px**,所以对它不会产生任何影响,如果老项目的某些页面之前使用了 **dp** 进行布局,并且 **AndroidAutoSize** 对这些页面已经产生了不良影响,可以让之前使用了 **dp** 的旧 **Activity** 实现 **CancelAdapt** 取消适配 +* 对于老项目的使用,**AndroidAutoSize** 可以和 [**AndroidAutoLayout**](https://github.com/hongyangAndroid/AndroidAutoLayout) 一起使用,因为 **AndroidAutoLayout** 使用的是 **px**,所以 **AndroidAutoSize** 对它不会产生任何影响,如果老项目的某些页面之前使用了 **dp** 进行布局,并且 **AndroidAutoSize** 对这些页面已经产生了不良影响,可以让之前使用了 **dp** 的旧 **Activity** 实现 **CancelAdapt** 取消适配 ## Download ``` gradle From 633d090e554f00fd262dcd2f117def24f283a42b Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 11:52:01 +0800 Subject: [PATCH 006/192] Update README-zh.md --- README-zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index f330dc5..7be00fb 100644 --- a/README-zh.md +++ b/README-zh.md @@ -73,7 +73,7 @@ implementation 'me.jessyan:autosize:0.7.0' ``` -## Usage (只需要这一步框架就可以运行) +## Usage (真的不吹牛逼,只需要这一步框架就可以运行,对所有页面进行适配) ### Step 1 * **请在 AndroidManifest 中填写全局设计图尺寸 (单位 dp)** ```xml From 83e0cb1e013ea454d49332993a89782a2f590b2e Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 11:53:59 +0800 Subject: [PATCH 007/192] Update README-zh.md --- README-zh.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README-zh.md b/README-zh.md index 7be00fb..a0623c5 100644 --- a/README-zh.md +++ b/README-zh.md @@ -73,8 +73,8 @@ implementation 'me.jessyan:autosize:0.7.0' ``` -## Usage (真的不吹牛逼,只需要这一步框架就可以运行,对所有页面进行适配) -### Step 1 +## Usage +### Step 1 (真的不吹牛逼,只需要这一步框架就可以对项目中的所有页面进行适配) * **请在 AndroidManifest 中填写全局设计图尺寸 (单位 dp)** ```xml @@ -89,7 +89,7 @@ ``` -## Advanced (以下用法不懂?答应我,认真看 Demo 好不好?) +## Advanced (以下用法看不懂?答应我,认真看 Demo 好不好?) * **当某个页面的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数** ```java From 172271c711b2766863300e1d0f80fe2a63ef011a Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 13:38:50 +0800 Subject: [PATCH 008/192] Update README-zh.md --- README-zh.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README-zh.md b/README-zh.md index a0623c5..54a42e5 100644 --- a/README-zh.md +++ b/README-zh.md @@ -74,7 +74,7 @@ ``` ## Usage -### Step 1 (真的不吹牛逼,只需要这一步框架就可以对项目中的所有页面进行适配) +### Step 1 (真的不吹牛逼,只需要以下这一步,框架就可以对项目中的所有页面进行适配) * **请在 AndroidManifest 中填写全局设计图尺寸 (单位 dp)** ```xml diff --git a/README.md b/README.md index 47d60de..79cc332 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ ``` -## Advanced +## Advance (see demo) * **Customize the adaptation parameters of the Activity:** ```java From e0da5b0292c5223517a9219700b8328f2db8d97f Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 14:21:04 +0800 Subject: [PATCH 009/192] Improve provider on AndroidManifest.xml --- autosize/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autosize/src/main/AndroidManifest.xml b/autosize/src/main/AndroidManifest.xml index baeb39f..ccbf043 100644 --- a/autosize/src/main/AndroidManifest.xml +++ b/autosize/src/main/AndroidManifest.xml @@ -4,7 +4,7 @@ \ No newline at end of file From 4b7f96972e344861fcfef8e8a0c2cbf0e419208d Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 15:30:33 +0800 Subject: [PATCH 010/192] Add ISSUE_TEMPLATE --- .github/ISSUE_TEMPLATE.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..cb7cb97 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,33 @@ + +### Environment +- [x] Autosize Version: +- [x] Target Android Version: +- [x] Device Model: +- [x] Device Resolution: +- [x] Design Size On AndroidManifest: + + +### Bug Description: + + + +### Log: + +```log + + +``` + + +### Screenshot + + + +### Related Code: +```java + + +``` + + +### Others: From e9c635ce426f0b82d2c76df866b6c2988ed25748 Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 15:32:00 +0800 Subject: [PATCH 011/192] Update ISSUE_TEMPLATE --- .github/ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index cb7cb97..2fb9585 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,4 +1,4 @@ - + ### Environment - [x] Autosize Version: - [x] Target Android Version: From e16deec17eaa3dd1f2917b8a212331d34f7c2f56 Mon Sep 17 00:00:00 2001 From: JessYan Date: Wed, 22 Aug 2018 19:19:56 +0800 Subject: [PATCH 012/192] Improve ScreenUtils --- .../src/main/java/me/jessyan/autosize/utils/ScreenUtils.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autosize/src/main/java/me/jessyan/autosize/utils/ScreenUtils.java b/autosize/src/main/java/me/jessyan/autosize/utils/ScreenUtils.java index aa397bd..ff0dee7 100644 --- a/autosize/src/main/java/me/jessyan/autosize/utils/ScreenUtils.java +++ b/autosize/src/main/java/me/jessyan/autosize/utils/ScreenUtils.java @@ -32,6 +32,10 @@ */ public class ScreenUtils { + private ScreenUtils() { + throw new IllegalStateException("you can't instantiate me!"); + } + public static int getStatusBarHeight() { int result = 0; try { From cd0a84c2a4b363a9b48d0b0d6663c689d3ffa848 Mon Sep 17 00:00:00 2001 From: JessYan Date: Thu, 23 Aug 2018 11:21:33 +0800 Subject: [PATCH 013/192] Fix screenOrientation change --- .../src/main/java/me/jessyan/autosize/AutoSize.java | 5 ++++- .../java/me/jessyan/autosize/AutoSizeConfig.java | 13 +++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/AutoSize.java b/autosize/src/main/java/me/jessyan/autosize/AutoSize.java index 6e7f131..755298a 100644 --- a/autosize/src/main/java/me/jessyan/autosize/AutoSize.java +++ b/autosize/src/main/java/me/jessyan/autosize/AutoSize.java @@ -142,9 +142,12 @@ public static void autoConvertDensityBaseOnHeight(Activity activity, float desig public static void autoConvertDensity(Activity activity, float sizeInDp, boolean isBaseOnWidth) { Preconditions.checkNotNull(activity, "activity == null"); + int screenSize = isBaseOnWidth ? AutoSizeConfig.getInstance().getScreenWidth() + : AutoSizeConfig.getInstance().getScreenHeight(); String key = sizeInDp + "|" + isBaseOnWidth + "|" + AutoSizeConfig.getInstance().isUseDeviceSize() + "|" - + AutoSizeConfig.getInstance().getInitScaledDensity(); + + AutoSizeConfig.getInstance().getInitScaledDensity() + "|" + + screenSize; DisplayMetricsInfo displayMetricsInfo = mCache.get(key); diff --git a/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java b/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java index 478a18f..980764b 100644 --- a/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java +++ b/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java @@ -170,10 +170,15 @@ AutoSizeConfig init(final Application application, boolean isBaseOnWidth, AutoAd application.registerComponentCallbacks(new ComponentCallbacks() { @Override public void onConfigurationChanged(Configuration newConfig) { - if (newConfig != null && newConfig.fontScale > 0) { - mInitScaledDensity = - Resources.getSystem().getDisplayMetrics().scaledDensity; - LogUtils.d("initScaledDensity = " + mInitScaledDensity + " on ConfigurationChanged"); + if (newConfig != null) { + if (newConfig.fontScale > 0) { + mInitScaledDensity = + Resources.getSystem().getDisplayMetrics().scaledDensity; + LogUtils.d("initScaledDensity = " + mInitScaledDensity + " on ConfigurationChanged"); + } + int[] screenSize = ScreenUtils.getScreenSize(application); + mScreenWidth = screenSize[0]; + mScreenHeight = screenSize[1]; } } From 8bf46cbab4b3503f958b0c2e356847bd75bcfcfe Mon Sep 17 00:00:00 2001 From: JessYan Date: Thu, 23 Aug 2018 11:59:38 +0800 Subject: [PATCH 014/192] Fix MIUI bugs --- .../java/me/jessyan/autosize/AutoSize.java | 58 ++++++++++++++++--- 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/AutoSize.java b/autosize/src/main/java/me/jessyan/autosize/AutoSize.java index 755298a..5f4f417 100644 --- a/autosize/src/main/java/me/jessyan/autosize/AutoSize.java +++ b/autosize/src/main/java/me/jessyan/autosize/AutoSize.java @@ -18,9 +18,11 @@ import android.app.Activity; import android.app.Dialog; import android.app.Fragment; +import android.content.res.Resources; import android.util.DisplayMetrics; import android.view.View; +import java.lang.reflect.Field; import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -191,7 +193,7 @@ public static void cancelAdapt(Activity activity) { } /** - * 赋值 + * 给几大 {@link DisplayMetrics} 赋值 * * @param activity {@link Activity} * @param density {@link DisplayMetrics#density} @@ -202,12 +204,54 @@ private static void setDensity(Activity activity, float density, int densityDpi, final DisplayMetrics activityDisplayMetrics = activity.getResources().getDisplayMetrics(); final DisplayMetrics appDisplayMetrics = AutoSizeConfig.getInstance().getApplication().getResources().getDisplayMetrics(); - activityDisplayMetrics.density = density; - activityDisplayMetrics.densityDpi = densityDpi; - activityDisplayMetrics.scaledDensity = scaledDensity; + setDensity(activityDisplayMetrics, density, densityDpi, scaledDensity); + + setDensity(appDisplayMetrics, density, densityDpi, scaledDensity); + + //兼容 MIUI + DisplayMetrics activityDisplayMetricsOnMIUI = getMetricsOnMiui(activity.getResources()); + DisplayMetrics appDisplayMetricsOnMIUI = getMetricsOnMiui(AutoSizeConfig.getInstance().getApplication().getResources()); + + if (activityDisplayMetricsOnMIUI != null) { + setDensity(activityDisplayMetricsOnMIUI, density, densityDpi, scaledDensity); + } + + if (appDisplayMetricsOnMIUI != null) { + setDensity(appDisplayMetricsOnMIUI, density, densityDpi, scaledDensity); + } + } - appDisplayMetrics.density = density; - appDisplayMetrics.densityDpi = densityDpi; - appDisplayMetrics.scaledDensity = scaledDensity; + /** + * 赋值 + * + * @param displayMetrics {@link DisplayMetrics} + * @param density {@link DisplayMetrics#density} + * @param densityDpi {@link DisplayMetrics#densityDpi} + * @param scaledDensity {@link DisplayMetrics#scaledDensity} + */ + private static void setDensity(DisplayMetrics displayMetrics, float density, int densityDpi, float scaledDensity) { + displayMetrics.density = density; + displayMetrics.densityDpi = densityDpi; + displayMetrics.scaledDensity = scaledDensity; + } + + /** + * 解决 MIUI 更改框架导致的 MIUI7 + Android5.1.1 上出现的失效问题 (以及极少数基于这部分 MIUI 去掉 ART 然后置入 XPosed 的手机) + * 来源于: https://github.com/Firedamp/Rudeness/blob/master/rudeness-sdk/src/main/java/com/bulong/rudeness/RudenessScreenHelper.java#L61:5 + * + * @param resources {@link Resources} + * @return {@link DisplayMetrics}, 可能为 {@code null} + */ + private static DisplayMetrics getMetricsOnMiui(Resources resources) { + if ("MiuiResources".equals(resources.getClass().getSimpleName()) || "XResources".equals(resources.getClass().getSimpleName())) { + try { + Field field = Resources.class.getDeclaredField("mTmpMetrics"); + field.setAccessible(true); + return (DisplayMetrics) field.get(resources); + } catch (Exception e) { + return null; + } + } + return null; } } From fe98481dc511bc3f3ffc2f830293a170fb96d7c6 Mon Sep 17 00:00:00 2001 From: JessYan Date: Thu, 23 Aug 2018 18:15:13 +0800 Subject: [PATCH 015/192] Improve ScreenUtils#getHeightOfNavigationBar --- .../main/java/me/jessyan/autosize/utils/ScreenUtils.java | 8 ++++++++ demo/build.gradle | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/utils/ScreenUtils.java b/autosize/src/main/java/me/jessyan/autosize/utils/ScreenUtils.java index ff0dee7..a8f99f5 100644 --- a/autosize/src/main/java/me/jessyan/autosize/utils/ScreenUtils.java +++ b/autosize/src/main/java/me/jessyan/autosize/utils/ScreenUtils.java @@ -19,6 +19,7 @@ import android.content.res.Resources; import android.graphics.Point; import android.os.Build; +import android.provider.Settings; import android.util.DisplayMetrics; import android.view.Display; import android.view.WindowManager; @@ -82,6 +83,13 @@ public static int[] getScreenSize(Context context) { } public static int getHeightOfNavigationBar(Context context) { + //如果小米手机开启了全面屏手势隐藏了导航栏则返回 0 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + if (Settings.Global.getInt(context.getContentResolver(), "force_fsg_nav_bar", 0) != 0) { + return 0; + } + } + Display d = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); int realHeight = getScreenSize(context)[1]; diff --git a/demo/build.gradle b/demo/build.gradle index 2d7af6e..89337a8 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -21,8 +21,8 @@ android { } dependencies { - implementation 'me.jessyan:autosize:0.7.0' -// implementation project(':autosize') +// implementation 'me.jessyan:autosize:0.7.0' + implementation project(':autosize') implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'cat.ereza:customactivityoncrash:2.2.0' testImplementation 'junit:junit:4.12' From cfd0f55a12035c2e10c6cc55084e460ee40b07f7 Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 15:49:30 +0800 Subject: [PATCH 016/192] Create AutoSizeUtils --- .../jessyan/autosize/utils/AutoSizeUtils.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java diff --git a/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java b/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java new file mode 100644 index 0000000..fb3fbb4 --- /dev/null +++ b/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java @@ -0,0 +1,43 @@ +/* + * Copyright 2018 JessYan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.jessyan.autosize.utils; + +import android.content.Context; +import android.util.TypedValue; + +/** + * ================================================ + * AndroidAutoSize 常用工具类 + *

+ * Created by JessYan on 2018/8/25 15:24 + * Contact me + * Follow me + * ================================================ + */ +public class AutoSizeUtils { + + private AutoSizeUtils() { + throw new IllegalStateException("you can't instantiate me!"); + } + + public static int dp2px(Context context, float value) { + return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics()) + 0.5f); + } + + public static int sp2px(Context context, float value) { + return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, value, context.getResources().getDisplayMetrics()) + 0.5f); + } +} From e8b679f063d2097bccf679ef894d75e3fd53fbed Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 17:28:10 +0800 Subject: [PATCH 017/192] Add isCustomFragment to AutoSizeConfig --- .../me/jessyan/autosize/AutoSizeConfig.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java b/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java index 980764b..39353b4 100644 --- a/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java +++ b/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java @@ -23,6 +23,7 @@ import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; +import android.support.v4.app.Fragment; import android.util.DisplayMetrics; import me.jessyan.autosize.external.ExternalAdaptManager; @@ -102,6 +103,10 @@ public final class AutoSizeConfig { * @see #restart() */ private boolean isStop; + /** + * 是否让框架支持自定义 {@link Fragment} 的适配参数, 由于这个需求是比较少见的, 所以须要使用者手动开启 + */ + private boolean isCustomFragment; public static AutoSizeConfig getInstance() { if (sInstance == null) { @@ -266,6 +271,34 @@ public AutoSizeConfig setLog(boolean log) { return this; } + /** + * 是否让框架支持自定义 {@link Fragment} 的适配参数, 由于这个需求是比较少见的, 所以须要使用者手动开启 + * + * @param customFragment {@code true} 为支持 + */ + public AutoSizeConfig setCustomFragment(boolean customFragment) { + isCustomFragment = customFragment; + return this; + } + + /** + * 框架是否已经开启支持自定义 {@link Fragment} 的适配参数 + * + * @return {@code true} 为支持 + */ + public boolean isCustomFragment() { + return isCustomFragment; + } + + /** + * 框架是否已经停止运行 + * + * @return {@code false} 框架正在运行, {@code true} 框架已经停止运行 + */ + public boolean isStop() { + return isStop; + } + /** * {@link ExternalAdaptManager} 用来管理外部三方库 {@link Activity} 的适配 * From f25036df0b685f9296c8ac651e901ad8bd47f44c Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 17:44:36 +0800 Subject: [PATCH 018/192] Improve AutoAdaptStrategy --- .../main/java/me/jessyan/autosize/AutoAdaptStrategy.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/AutoAdaptStrategy.java b/autosize/src/main/java/me/jessyan/autosize/AutoAdaptStrategy.java index 419d077..671dec7 100644 --- a/autosize/src/main/java/me/jessyan/autosize/AutoAdaptStrategy.java +++ b/autosize/src/main/java/me/jessyan/autosize/AutoAdaptStrategy.java @@ -17,6 +17,8 @@ import android.app.Activity; import android.app.Application; +import android.support.v4.app.Fragment; +import android.util.DisplayMetrics; /** * ================================================ @@ -34,7 +36,8 @@ public interface AutoAdaptStrategy { /** * 开始执行屏幕适配逻辑 * - * @param activity 需要屏幕适配的 {@link Activity} + * @param target 需要屏幕适配的对象 (可能是 {@link Activity} 或者 {@link Fragment}) + * @param activity 需要拿到当前的 {@link Activity} 才能修改 {@link DisplayMetrics#density} */ - void applyAdapt(Activity activity); + void applyAdapt(Object target, Activity activity); } From e9ad60988da8f4c68c13ad127a41a7587231393e Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 17:58:29 +0800 Subject: [PATCH 019/192] Improve ActivityLifecycleCallbacksImpl --- .../ActivityLifecycleCallbacksImpl.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/ActivityLifecycleCallbacksImpl.java b/autosize/src/main/java/me/jessyan/autosize/ActivityLifecycleCallbacksImpl.java index 9ec126c..dea3d1b 100644 --- a/autosize/src/main/java/me/jessyan/autosize/ActivityLifecycleCallbacksImpl.java +++ b/autosize/src/main/java/me/jessyan/autosize/ActivityLifecycleCallbacksImpl.java @@ -18,6 +18,8 @@ import android.app.Activity; import android.app.Application; import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; /** * ================================================ @@ -34,16 +36,27 @@ public class ActivityLifecycleCallbacksImpl implements Application.ActivityLifec * 屏幕适配逻辑策略类 */ private AutoAdaptStrategy mAutoAdaptStrategy; + /** + * 让 {@link Fragment} 支持自定义适配参数 + */ + private FragmentLifecycleCallbacksImpl mFragmentLifecycleCallbacks; public ActivityLifecycleCallbacksImpl(AutoAdaptStrategy autoAdaptStrategy) { - setAutoAdaptStrategy(autoAdaptStrategy); + mFragmentLifecycleCallbacks = new FragmentLifecycleCallbacksImpl(autoAdaptStrategy); + mAutoAdaptStrategy = autoAdaptStrategy; } @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + if (AutoSizeConfig.getInstance().isCustomFragment()) { + if (activity instanceof FragmentActivity) { + ((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(mFragmentLifecycleCallbacks, true); + } + } + //Activity 中的 setContentView(View) 一定要在 super.onCreate(Bundle); 之后执行 if (mAutoAdaptStrategy != null) { - mAutoAdaptStrategy.applyAdapt(activity); + mAutoAdaptStrategy.applyAdapt(activity, activity); } } @@ -84,5 +97,6 @@ public void onActivityDestroyed(Activity activity) { */ public void setAutoAdaptStrategy(AutoAdaptStrategy autoAdaptStrategy) { mAutoAdaptStrategy = autoAdaptStrategy; + mFragmentLifecycleCallbacks.setAutoAdaptStrategy(autoAdaptStrategy); } } From 5366ad0e8af0232cf508cf724b258f57f194ea68 Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 18:00:59 +0800 Subject: [PATCH 020/192] Create FragmentLifecycleCallbacksImpl --- .../FragmentLifecycleCallbacksImpl.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 autosize/src/main/java/me/jessyan/autosize/FragmentLifecycleCallbacksImpl.java diff --git a/autosize/src/main/java/me/jessyan/autosize/FragmentLifecycleCallbacksImpl.java b/autosize/src/main/java/me/jessyan/autosize/FragmentLifecycleCallbacksImpl.java new file mode 100644 index 0000000..4e87ecd --- /dev/null +++ b/autosize/src/main/java/me/jessyan/autosize/FragmentLifecycleCallbacksImpl.java @@ -0,0 +1,57 @@ +/* + * Copyright 2018 JessYan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.jessyan.autosize; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; + +/** + * ================================================ + * {@link FragmentLifecycleCallbacksImpl} 可用来代替在 BaseFragment 中加入适配代码的传统方式 + * {@link FragmentLifecycleCallbacksImpl} 这种方案类似于 AOP, 面向接口, 侵入性低, 方便统一管理, 扩展性强, 并且也支持适配三方库的 {@link Fragment} + *

+ * Created by JessYan on 2018/8/25 13:52 + * Contact me + * Follow me + * ================================================ + */ +public class FragmentLifecycleCallbacksImpl extends FragmentManager.FragmentLifecycleCallbacks { + /** + * 屏幕适配逻辑策略类 + */ + private AutoAdaptStrategy mAutoAdaptStrategy; + + public FragmentLifecycleCallbacksImpl(AutoAdaptStrategy autoAdaptStrategy) { + mAutoAdaptStrategy = autoAdaptStrategy; + } + + @Override + public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) { + if (mAutoAdaptStrategy != null) { + mAutoAdaptStrategy.applyAdapt(f, f.getActivity()); + } + } + + /** + * 设置屏幕适配逻辑策略类 + * + * @param autoAdaptStrategy {@link AutoAdaptStrategy} + */ + public void setAutoAdaptStrategy(AutoAdaptStrategy autoAdaptStrategy) { + mAutoAdaptStrategy = autoAdaptStrategy; + } +} From c8300dd9f421907d32ded36f09ac5bd11ae2711c Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 18:30:55 +0800 Subject: [PATCH 021/192] Improve ExternalAdaptManager --- .../external/ExternalAdaptManager.java | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/external/ExternalAdaptManager.java b/autosize/src/main/java/me/jessyan/autosize/external/ExternalAdaptManager.java index 88a2667..3da338f 100644 --- a/autosize/src/main/java/me/jessyan/autosize/external/ExternalAdaptManager.java +++ b/autosize/src/main/java/me/jessyan/autosize/external/ExternalAdaptManager.java @@ -16,6 +16,7 @@ package me.jessyan.autosize.external; import android.app.Activity; +import android.support.v4.app.Fragment; import java.util.ArrayList; import java.util.HashMap; @@ -48,17 +49,17 @@ public class ExternalAdaptManager { * 支持链式调用, 如: * {@link ExternalAdaptManager#addCancelAdaptOfActivity(Class)#addCancelAdaptOfActivity(Class)} * - * @param activityClass {@link Activity} class + * @param targetClass {@link Activity} class, {@link Fragment} class */ - public synchronized ExternalAdaptManager addCancelAdaptOfActivity(Class activityClass) { - Preconditions.checkNotNull(activityClass, "activityClass == null"); + public synchronized ExternalAdaptManager addCancelAdaptOfActivity(Class targetClass) { + Preconditions.checkNotNull(targetClass, "targetClass == null"); if (!isRun) { isRun = true; } if (mCancelAdaptList == null) { mCancelAdaptList = new ArrayList<>(); } - mCancelAdaptList.add(activityClass.getCanonicalName()); + mCancelAdaptList.add(targetClass.getCanonicalName()); return this; } @@ -77,47 +78,47 @@ public synchronized ExternalAdaptManager addCancelAdaptOfActivity(Class activ * 支持链式调用, 如: * {@link ExternalAdaptManager#addExternalAdaptInfoOfActivity(Class, ExternalAdaptInfo)#addExternalAdaptInfoOfActivity(Class, ExternalAdaptInfo)} * - * @param activityClass {@link Activity} class - * @param info {@link ExternalAdaptInfo} 适配参数 + * @param targetClass {@link Activity} class, {@link Fragment} class + * @param info {@link ExternalAdaptInfo} 适配参数 */ - public synchronized ExternalAdaptManager addExternalAdaptInfoOfActivity(Class activityClass, ExternalAdaptInfo info) { - Preconditions.checkNotNull(activityClass, "activityClass == null"); + public synchronized ExternalAdaptManager addExternalAdaptInfoOfActivity(Class targetClass, ExternalAdaptInfo info) { + Preconditions.checkNotNull(targetClass, "targetClass == null"); if (!isRun) { isRun = true; } if (mExternalAdaptInfos == null) { mExternalAdaptInfos = new HashMap<>(16); } - mExternalAdaptInfos.put(activityClass.getCanonicalName(), info); + mExternalAdaptInfos.put(targetClass.getCanonicalName(), info); return this; } /** * 这个 {@link Activity} 是否存在在取消适配的列表中, 如果在, 则该 {@link Activity} 适配失效 * - * @param activityClass {@link Activity} class + * @param targetClass {@link Activity} class, {@link Fragment} class * @return {@code true} 为存在, {@code false} 为不存在 */ - public synchronized boolean isCancelAdapt(Class activityClass) { - Preconditions.checkNotNull(activityClass, "activityClass == null"); + public synchronized boolean isCancelAdapt(Class targetClass) { + Preconditions.checkNotNull(targetClass, "targetClass == null"); if (mCancelAdaptList == null) { return false; } - return mCancelAdaptList.contains(activityClass.getCanonicalName()); + return mCancelAdaptList.contains(targetClass.getCanonicalName()); } /** * 这个 {@link Activity} 是否提供有自定义的适配参数, 如果有则使用此适配参数进行适配 * - * @param activityClass {@link Activity} class + * @param targetClass {@link Activity} class, {@link Fragment} class * @return 如果返回 {@code null} 则说明该 {@link Activity} 没有提供自定义的适配参数 */ - public synchronized ExternalAdaptInfo getExternalAdaptInfoOfActivity(Class activityClass) { - Preconditions.checkNotNull(activityClass, "activityClass == null"); + public synchronized ExternalAdaptInfo getExternalAdaptInfoOfActivity(Class targetClass) { + Preconditions.checkNotNull(targetClass, "targetClass == null"); if (mExternalAdaptInfos == null) { return null; } - return mExternalAdaptInfos.get(activityClass.getCanonicalName()); + return mExternalAdaptInfos.get(targetClass.getCanonicalName()); } /** From b1518770bf537eba26488ba4f6e548bca77ece3e Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 18:59:29 +0800 Subject: [PATCH 022/192] Improve DefaultAutoAdaptStrategy --- .../autosize/DefaultAutoAdaptStrategy.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/DefaultAutoAdaptStrategy.java b/autosize/src/main/java/me/jessyan/autosize/DefaultAutoAdaptStrategy.java index da76bc6..feb0db8 100644 --- a/autosize/src/main/java/me/jessyan/autosize/DefaultAutoAdaptStrategy.java +++ b/autosize/src/main/java/me/jessyan/autosize/DefaultAutoAdaptStrategy.java @@ -38,38 +38,38 @@ */ public class DefaultAutoAdaptStrategy implements AutoAdaptStrategy { @Override - public void applyAdapt(Activity activity) { + public void applyAdapt(Object target, Activity activity) { //检查是否开启了外部三方库的适配模式, 只要不主动调用 ExternalAdaptManager 的方法, 下面的代码就不会执行 if (AutoSizeConfig.getInstance().getExternalAdaptManager().isRun()) { - if (AutoSizeConfig.getInstance().getExternalAdaptManager().isCancelAdapt(activity.getClass())) { - LogUtils.w(String.format(Locale.ENGLISH, "%s canceled the adaptation!", activity.getClass().getName())); + if (AutoSizeConfig.getInstance().getExternalAdaptManager().isCancelAdapt(target.getClass())) { + LogUtils.w(String.format(Locale.ENGLISH, "%s canceled the adaptation!", target.getClass().getName())); AutoSize.cancelAdapt(activity); return; } else { ExternalAdaptInfo info = AutoSizeConfig.getInstance().getExternalAdaptManager() - .getExternalAdaptInfoOfActivity(activity.getClass()); + .getExternalAdaptInfoOfActivity(target.getClass()); if (info != null) { - LogUtils.d(String.format(Locale.ENGLISH, "%s used %s for adaptation!", activity.getClass().getName(), ExternalAdaptInfo.class.getName())); + LogUtils.d(String.format(Locale.ENGLISH, "%s used %s for adaptation!", target.getClass().getName(), ExternalAdaptInfo.class.getName())); AutoSize.autoConvertDensityOfExternalAdaptInfo(activity, info); return; } } } - //如果 activity 实现 CancelAdapt 接口表示放弃适配, 所有的适配效果都将失效 - if (activity instanceof CancelAdapt) { - LogUtils.w(String.format(Locale.ENGLISH, "%s canceled the adaptation!", activity.getClass().getName())); + //如果 target 实现 CancelAdapt 接口表示放弃适配, 所有的适配效果都将失效 + if (target instanceof CancelAdapt) { + LogUtils.w(String.format(Locale.ENGLISH, "%s canceled the adaptation!", target.getClass().getName())); AutoSize.cancelAdapt(activity); return; } - //如果 activity 实现 CustomAdapt 接口表示该 activity 想自定义一些用于适配的参数, 从而改变最终的适配效果 - if (activity instanceof CustomAdapt) { - LogUtils.d(String.format(Locale.ENGLISH, "%s implemented by %s!", activity.getClass().getName(), CustomAdapt.class.getName())); - AutoSize.autoConvertDensityOfCustomAdapt(activity, (CustomAdapt) activity); + //如果 target 实现 CustomAdapt 接口表示该 target 想自定义一些用于适配的参数, 从而改变最终的适配效果 + if (target instanceof CustomAdapt) { + LogUtils.d(String.format(Locale.ENGLISH, "%s implemented by %s!", target.getClass().getName(), CustomAdapt.class.getName())); + AutoSize.autoConvertDensityOfCustomAdapt(activity, (CustomAdapt) target); } else { - LogUtils.d(String.format(Locale.ENGLISH, "%s used the global configuration.", activity.getClass().getName())); + LogUtils.d(String.format(Locale.ENGLISH, "%s used the global configuration.", target.getClass().getName())); AutoSize.autoConvertDensityOfGlobal(activity); } } From 720c80dac3f70c5e92e80ad47bc9e40417356d88 Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 19:03:28 +0800 Subject: [PATCH 023/192] Improve BaseApplication --- .../java/me/jessyan/autosize/demo/BaseApplication.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/demo/src/main/java/me/jessyan/autosize/demo/BaseApplication.java b/demo/src/main/java/me/jessyan/autosize/demo/BaseApplication.java index 6027900..5f21c30 100644 --- a/demo/src/main/java/me/jessyan/autosize/demo/BaseApplication.java +++ b/demo/src/main/java/me/jessyan/autosize/demo/BaseApplication.java @@ -45,7 +45,11 @@ public void onCreate() { * 以下是 AndroidAutoSize 可以自定义的参数, {@link AutoSizeConfig} 的每个方法的注释都写的很详细 * 使用前请一定记得跳进源码,查看方法的注释, 下面的注释只是简单描述!!! */ -// AutoSizeConfig.getInstance() + AutoSizeConfig.getInstance() + + //是否让框架支持自定义 Fragment 的适配参数, 由于这个需求是比较少见的, 所以须要使用者手动开启 + //如果没有这个需求建议不开启 + .setCustomFragment(true) //是否打印 AutoSize 的内部日志, 默认为 true, 如果您不想 AutoSize 打印日志, 则请设置为 false // .setLog(false) @@ -60,7 +64,7 @@ public void onCreate() { //设置屏幕适配逻辑策略类, 一般不用设置, 使用框架默认的就好 // .setAutoAdaptStrategy(new AutoAdaptStrategy()) -// ; + ; customAdaptForExternal(); } From 3d1ede954ea5de3a846369764c3853fbbf39e8ed Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 19:04:59 +0800 Subject: [PATCH 024/192] Add com.android.support:support-v4:27.1.1 --- autosize/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/autosize/build.gradle b/autosize/build.gradle index d58bf44..72d605a 100644 --- a/autosize/build.gradle +++ b/autosize/build.gradle @@ -25,6 +25,7 @@ android { } dependencies { + compileOnly 'com.android.support:support-v4:27.1.1' } apply from: 'bintray.gradle' \ No newline at end of file From 0a133215b955acbf7c16a8706e0ffea9ce504e4a Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 19:24:18 +0800 Subject: [PATCH 025/192] Release v0.8.0 --- README-zh.md | 35 +++++++++++++++++++++++++++++++---- README.md | 31 +++++++++++++++++++++++++++++-- build.gradle | 4 ++-- demo/build.gradle | 2 +- 4 files changed, 63 insertions(+), 9 deletions(-) diff --git a/README-zh.md b/README-zh.md index 54a42e5..4093d45 100644 --- a/README-zh.md +++ b/README-zh.md @@ -2,7 +2,7 @@

- Latest Stable Version + Latest Stable Version Build Status @@ -70,7 +70,7 @@ ## Download ``` gradle - implementation 'me.jessyan:autosize:0.7.0' + implementation 'me.jessyan:autosize:0.8.0' ``` ## Usage @@ -91,7 +91,8 @@ ## Advanced (以下用法看不懂?答应我,认真看 Demo 好不好?) -* **当某个页面的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数** +### Activity +* **当某个 Activity 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数** ```java public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt { @@ -108,7 +109,7 @@ public class CustomAdaptActivity extends AppCompatActivity implements CustomAdap ``` -* **当某个页面想放弃适配,请实现 CancelAdapt 接口** +* **当某个 Activity 想放弃适配,请实现 CancelAdapt 接口** ```java public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt { @@ -116,6 +117,32 @@ public class CancelAdaptActivity extends AppCompatActivity implements CancelAdap ``` +### Fragment +* **当某个 Fragment 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数** +```java +public class CustomAdaptFragment extends Fragment implements CustomAdapt { + + @Override + public boolean isBaseOnWidth() { + return false; + } + + @Override + public float getSizeInDp() { + return 667; + } +} + +``` + +* **当某个 Fragment 想放弃适配,请实现 CancelAdapt 接口** +```java +public class CancelAdaptFragment extends Fragment implements CancelAdapt { + +} + +``` + ## ProGuard ``` -keep class me.jessyan.autosize.** { *; } diff --git a/README.md b/README.md index 79cc332..b0b123e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

- Latest Stable Version + Latest Stable Version Build Status @@ -72,7 +72,7 @@ ## Download ``` gradle - implementation 'me.jessyan:autosize:0.7.0' + implementation 'me.jessyan:autosize:0.8.0' ``` ## Usage (just one steps) @@ -93,6 +93,7 @@ ## Advance (see demo) +### Activity * **Customize the adaptation parameters of the Activity:** ```java public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt { @@ -118,6 +119,32 @@ public class CancelAdaptActivity extends AppCompatActivity implements CancelAdap ``` +### Fragment +* **Customize the adaptation parameters of the Fragment:** +```java +public class CustomAdaptFragment extends Fragment implements CustomAdapt { + + @Override + public boolean isBaseOnWidth() { + return false; + } + + @Override + public float getSizeInDp() { + return 667; + } +} + +``` + +* **Cancel the adaptation of the Fragment:** +```java +public class CancelAdaptFragment extends Fragment implements CancelAdapt { + +} + +``` + ## ProGuard ``` -keep class me.jessyan.autosize.** { *; } diff --git a/build.gradle b/build.gradle index 6acaa51..7262b49 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,6 @@ ext { targetSdkVersion = 27 compileSdkVersion = 27 buildToolsVersion = "27.0.3" - versionCode = 15 - versionName = "0.7.0" + versionCode = 18 + versionName = "0.8.0" } \ No newline at end of file diff --git a/demo/build.gradle b/demo/build.gradle index 89337a8..75e8ed1 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -21,7 +21,7 @@ android { } dependencies { -// implementation 'me.jessyan:autosize:0.7.0' +// implementation 'me.jessyan:autosize:0.8.0' implementation project(':autosize') implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'cat.ereza:customactivityoncrash:2.2.0' From d65d7149e5ef0c753301399edb099eea755c7851 Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 19:32:03 +0800 Subject: [PATCH 026/192] Create CustomFragment1 --- .../autosize/demo/CustomFragment1.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 demo/src/main/java/me/jessyan/autosize/demo/CustomFragment1.java diff --git a/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment1.java b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment1.java new file mode 100644 index 0000000..6932317 --- /dev/null +++ b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment1.java @@ -0,0 +1,69 @@ +/* + * Copyright 2018 JessYan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.jessyan.autosize.demo; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import me.jessyan.autosize.internal.CustomAdapt; +import me.jessyan.autosize.utils.AutoSizeUtils; + +/** + * ================================================ + * Created by JessYan on 2018/8/25 14:06 + * Contact me + * Follow me + * ================================================ + */ +public class CustomFragment1 extends Fragment implements CustomAdapt { + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return createTextView(inflater, "Fragment-1\nView width = 360dp\nTotal width = 1080dp", 0xffff0000); + } + + @Override + public boolean isBaseOnWidth() { + return true; + } + + @Override + public float getSizeInDp() { + return 1080; + } + + public static View createTextView(LayoutInflater inflater, String content, int backgroundColor) { + TextView view = new TextView(inflater.getContext()); + ViewGroup.LayoutParams layoutParams = + new ViewGroup.LayoutParams((AutoSizeUtils.dp2px(inflater.getContext(), 360)), + ViewGroup.LayoutParams.MATCH_PARENT); + view.setLayoutParams(layoutParams); + view.setText(content); + view.setTextColor(0xffffffff); + view.setGravity(Gravity.CENTER); + view.setTextSize(30); + view.setBackgroundColor(backgroundColor); + return view; + } +} From a0314be74db8e96d09dd0a002393fc5e330f7cde Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 19:32:13 +0800 Subject: [PATCH 027/192] Create CustomFragment2 --- .../autosize/demo/CustomFragment2.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 demo/src/main/java/me/jessyan/autosize/demo/CustomFragment2.java diff --git a/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment2.java b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment2.java new file mode 100644 index 0000000..632498a --- /dev/null +++ b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment2.java @@ -0,0 +1,52 @@ +/* + * Copyright 2018 JessYan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.jessyan.autosize.demo; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import me.jessyan.autosize.internal.CustomAdapt; + +/** + * ================================================ + * Created by JessYan on 2018/8/25 14:06 + * Contact me + * Follow me + * ================================================ + */ +public class CustomFragment2 extends Fragment implements CustomAdapt{ + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return CustomFragment1.createTextView(inflater, "Fragment-2\nView width = 360dp\nTotal width = 720dp", 0xff00ff00); + } + + @Override + public boolean isBaseOnWidth() { + return true; + } + + @Override + public float getSizeInDp() { + return 720; + } +} From 8ae4644f9fa2427fc8406127f2e8d18b055c63be Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 19:32:20 +0800 Subject: [PATCH 028/192] Create CustomFragment3 --- .../autosize/demo/CustomFragment3.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 demo/src/main/java/me/jessyan/autosize/demo/CustomFragment3.java diff --git a/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment3.java b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment3.java new file mode 100644 index 0000000..b9f2a1e --- /dev/null +++ b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment3.java @@ -0,0 +1,52 @@ +/* + * Copyright 2018 JessYan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.jessyan.autosize.demo; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import me.jessyan.autosize.internal.CustomAdapt; + +/** + * ================================================ + * Created by JessYan on 2018/8/25 14:06 + * Contact me + * Follow me + * ================================================ + */ +public class CustomFragment3 extends Fragment implements CustomAdapt{ + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return CustomFragment1.createTextView(inflater, "Fragment-3\nView width = 360dp\nTotal width = 360dp", 0xff0000ff); + } + + @Override + public boolean isBaseOnWidth() { + return true; + } + + @Override + public float getSizeInDp() { + return 360; + } +} From ec4c95a4395d6f25a07189b6d383c86c8cd1de19 Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 19:34:32 +0800 Subject: [PATCH 029/192] Improve CustomAdaptActivity --- .../me/jessyan/autosize/demo/CustomAdaptActivity.java | 11 +++++++++++ demo/src/main/res/layout/activity_custom_adapt.xml | 8 ++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/demo/src/main/java/me/jessyan/autosize/demo/CustomAdaptActivity.java b/demo/src/main/java/me/jessyan/autosize/demo/CustomAdaptActivity.java index 00b2f17..1db2965 100644 --- a/demo/src/main/java/me/jessyan/autosize/demo/CustomAdaptActivity.java +++ b/demo/src/main/java/me/jessyan/autosize/demo/CustomAdaptActivity.java @@ -16,8 +16,11 @@ package me.jessyan.autosize.demo; import android.app.Activity; +import android.content.Intent; import android.os.Bundle; +import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; +import android.view.View; import me.jessyan.autosize.internal.CustomAdapt; @@ -43,6 +46,14 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_custom_adapt); } + /** + * 跳转到 {@link FragmentHost}, 展示项目内部的 {@link Fragment} 自定义适配参数的用法 + * + * @param view {@link View} + */ + public void goCustomAdaptFragment(View view) { + startActivity(new Intent(getApplicationContext(), FragmentHost.class)); + } /** * 是否按照宽度进行等比例适配 (为了保证在高宽比不同的屏幕上也能正常适配, 所以只能在宽度和高度之中选一个作为基准进行适配) * diff --git a/demo/src/main/res/layout/activity_custom_adapt.xml b/demo/src/main/res/layout/activity_custom_adapt.xml index f087d37..d441dc0 100644 --- a/demo/src/main/res/layout/activity_custom_adapt.xml +++ b/demo/src/main/res/layout/activity_custom_adapt.xml @@ -30,13 +30,13 @@ android:background="#fff" /> - From 5b1fa2ca831a5fb6be3bb2215b58a95669204925 Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 19:35:19 +0800 Subject: [PATCH 030/192] Create FragmentHost --- demo/src/main/AndroidManifest.xml | 1 + .../jessyan/autosize/demo/FragmentHost.java | 50 +++++++++++++++++++ demo/src/main/res/layout/activity_host.xml | 24 +++++++++ 3 files changed, 75 insertions(+) create mode 100644 demo/src/main/java/me/jessyan/autosize/demo/FragmentHost.java create mode 100644 demo/src/main/res/layout/activity_host.xml diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml index 2a5f51f..c8e26a3 100644 --- a/demo/src/main/AndroidManifest.xml +++ b/demo/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ + Contact me + * Follow me + * ================================================ + */ +public class FragmentHost extends AppCompatActivity implements CustomAdapt{ + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_host); + getSupportFragmentManager().beginTransaction().add(R.id.container1, new CustomFragment1()).commit(); + getSupportFragmentManager().beginTransaction().add(R.id.container2, new CustomFragment2()).commit(); + getSupportFragmentManager().beginTransaction().add(R.id.container3, new CustomFragment3()).commit(); + } + + @Override + public boolean isBaseOnWidth() { + return true; + } + + @Override + public float getSizeInDp() { + return 720; + } +} diff --git a/demo/src/main/res/layout/activity_host.xml b/demo/src/main/res/layout/activity_host.xml new file mode 100644 index 0000000..0e4dfb4 --- /dev/null +++ b/demo/src/main/res/layout/activity_host.xml @@ -0,0 +1,24 @@ + + + + + + + + + \ No newline at end of file From 52c4d99398c38d1a95bcb539de3b1c36c29c78b0 Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 19:54:04 +0800 Subject: [PATCH 031/192] Update README.md --- README-zh.md | 6 ++++++ README.md | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/README-zh.md b/README-zh.md index 4093d45..7b9c109 100644 --- a/README-zh.md +++ b/README-zh.md @@ -118,6 +118,12 @@ public class CancelAdaptActivity extends AppCompatActivity implements CancelAdap ``` ### Fragment +* **首先开启支持 Fragment 自定义参数的功能** + +```java +AutoSizeConfig.getInstance().setCustomFragment(true); +``` + * **当某个 Fragment 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数** ```java public class CustomAdaptFragment extends Fragment implements CustomAdapt { diff --git a/README.md b/README.md index b0b123e..7b42867 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,10 @@ public class CancelAdaptActivity extends AppCompatActivity implements CancelAdap ``` ### Fragment +```java +AutoSizeConfig.getInstance().setCustomFragment(true); +``` + * **Customize the adaptation parameters of the Fragment:** ```java public class CustomAdaptFragment extends Fragment implements CustomAdapt { From 4395fe6419c5c396e4f2ffa94f21f8caba120b8f Mon Sep 17 00:00:00 2001 From: JessYan Date: Sat, 25 Aug 2018 19:56:31 +0800 Subject: [PATCH 032/192] Update README.md --- README-zh.md | 1 - README.md | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index 7b9c109..0fe452c 100644 --- a/README-zh.md +++ b/README-zh.md @@ -119,7 +119,6 @@ public class CancelAdaptActivity extends AppCompatActivity implements CancelAdap ### Fragment * **首先开启支持 Fragment 自定义参数的功能** - ```java AutoSizeConfig.getInstance().setCustomFragment(true); ``` diff --git a/README.md b/README.md index 7b42867..ba4ba6c 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ public class CancelAdaptActivity extends AppCompatActivity implements CancelAdap ``` ### Fragment +* **First enable the ability to support Fragment custom parameters** ```java AutoSizeConfig.getInstance().setCustomFragment(true); ``` From aae60ef575f6c11d56cb7b7a58fbeafc2b2a5f47 Mon Sep 17 00:00:00 2001 From: JessYan Date: Sun, 26 Aug 2018 17:57:34 +0800 Subject: [PATCH 033/192] Improve FragmentHost --- .../me/jessyan/autosize/demo/FragmentHost.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/demo/src/main/java/me/jessyan/autosize/demo/FragmentHost.java b/demo/src/main/java/me/jessyan/autosize/demo/FragmentHost.java index e80410e..e29fc0c 100644 --- a/demo/src/main/java/me/jessyan/autosize/demo/FragmentHost.java +++ b/demo/src/main/java/me/jessyan/autosize/demo/FragmentHost.java @@ -28,14 +28,20 @@ * Follow me * ================================================ */ -public class FragmentHost extends AppCompatActivity implements CustomAdapt{ +public class FragmentHost extends AppCompatActivity implements CustomAdapt { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_host); - getSupportFragmentManager().beginTransaction().add(R.id.container1, new CustomFragment1()).commit(); - getSupportFragmentManager().beginTransaction().add(R.id.container2, new CustomFragment2()).commit(); - getSupportFragmentManager().beginTransaction().add(R.id.container3, new CustomFragment3()).commit(); + if (getSupportFragmentManager().findFragmentById(R.id.container1) == null) { + getSupportFragmentManager().beginTransaction().add(R.id.container1, new CustomFragment1()).commit(); + } + if (getSupportFragmentManager().findFragmentById(R.id.container2) == null) { + getSupportFragmentManager().beginTransaction().add(R.id.container2, new CustomFragment2()).commit(); + } + if (getSupportFragmentManager().findFragmentById(R.id.container3) == null) { + getSupportFragmentManager().beginTransaction().add(R.id.container3, new CustomFragment3()).commit(); + } } @Override From 7d738553abe30d5b36774e5f32c975a9f2695c7a Mon Sep 17 00:00:00 2001 From: JessYan Date: Sun, 26 Aug 2018 18:10:48 +0800 Subject: [PATCH 034/192] Improve CustomFragment --- .../main/java/me/jessyan/autosize/demo/CustomFragment1.java | 5 +++++ .../main/java/me/jessyan/autosize/demo/CustomFragment2.java | 5 +++++ .../main/java/me/jessyan/autosize/demo/CustomFragment3.java | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment1.java b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment1.java index 6932317..2de983b 100644 --- a/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment1.java +++ b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment1.java @@ -25,6 +25,7 @@ import android.view.ViewGroup; import android.widget.TextView; +import me.jessyan.autosize.AutoSize; import me.jessyan.autosize.internal.CustomAdapt; import me.jessyan.autosize.utils.AutoSizeUtils; @@ -40,6 +41,10 @@ public class CustomFragment1 extends Fragment implements CustomAdapt { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + //由于某些原因, 屏幕旋转后 Fragment 的重建, 会导致框架对 Fragment 的自定义适配参数失去效果 + //所以如果您的 Fragment 允许屏幕旋转, 则请在 onCreateView 手动调用一次 AutoSize.autoConvertDensity() + //如果您的 Fragment 不允许屏幕旋转, 则可以将下面调用 AutoSize.autoConvertDensity() 的代码删除掉 + AutoSize.autoConvertDensity(getActivity(), 1080, true); return createTextView(inflater, "Fragment-1\nView width = 360dp\nTotal width = 1080dp", 0xffff0000); } diff --git a/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment2.java b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment2.java index 632498a..4043fc2 100644 --- a/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment2.java +++ b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment2.java @@ -23,6 +23,7 @@ import android.view.View; import android.view.ViewGroup; +import me.jessyan.autosize.AutoSize; import me.jessyan.autosize.internal.CustomAdapt; /** @@ -37,6 +38,10 @@ public class CustomFragment2 extends Fragment implements CustomAdapt{ @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + //由于某些原因, 屏幕旋转后 Fragment 的重建, 会导致框架对 Fragment 的自定义适配参数失去效果 + //所以如果您的 Fragment 允许屏幕旋转, 则请在 onCreateView 手动调用一次 AutoSize.autoConvertDensity() + //如果您的 Fragment 不允许屏幕旋转, 则可以将下面调用 AutoSize.autoConvertDensity() 的代码删除掉 + AutoSize.autoConvertDensity(getActivity(), 720, true); return CustomFragment1.createTextView(inflater, "Fragment-2\nView width = 360dp\nTotal width = 720dp", 0xff00ff00); } diff --git a/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment3.java b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment3.java index b9f2a1e..9d4a8a1 100644 --- a/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment3.java +++ b/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment3.java @@ -23,6 +23,7 @@ import android.view.View; import android.view.ViewGroup; +import me.jessyan.autosize.AutoSize; import me.jessyan.autosize.internal.CustomAdapt; /** @@ -37,6 +38,10 @@ public class CustomFragment3 extends Fragment implements CustomAdapt{ @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + //由于某些原因, 屏幕旋转后 Fragment 的重建, 会导致框架对 Fragment 的自定义适配参数失去效果 + //所以如果您的 Fragment 允许屏幕旋转, 则请在 onCreateView 手动调用一次 AutoSize.autoConvertDensity() + //如果您的 Fragment 不允许屏幕旋转, 则可以将下面调用 AutoSize.autoConvertDensity() 的代码删除掉 + AutoSize.autoConvertDensity(getActivity(), 360, true); return CustomFragment1.createTextView(inflater, "Fragment-3\nView width = 360dp\nTotal width = 360dp", 0xff0000ff); } From 5e74cb776e5fbde66c7ea526bce3d178b8d30a78 Mon Sep 17 00:00:00 2001 From: JessYan Date: Mon, 27 Aug 2018 16:12:12 +0800 Subject: [PATCH 035/192] Private fields on DisplayMetricsInfo --- .../main/java/me/jessyan/autosize/DisplayMetricsInfo.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/DisplayMetricsInfo.java b/autosize/src/main/java/me/jessyan/autosize/DisplayMetricsInfo.java index 930dc97..44243c4 100644 --- a/autosize/src/main/java/me/jessyan/autosize/DisplayMetricsInfo.java +++ b/autosize/src/main/java/me/jessyan/autosize/DisplayMetricsInfo.java @@ -29,9 +29,9 @@ * ================================================ */ public class DisplayMetricsInfo implements Parcelable { - public float density; - public int densityDpi; - public float scaledDensity; + private float density; + private int densityDpi; + private float scaledDensity; public DisplayMetricsInfo(float density, int densityDpi, float scaledDensity) { this.density = density; From 19fb9e22ed1ae620785ebd270dcac74c843f7eed Mon Sep 17 00:00:00 2001 From: JessYan Date: Mon, 27 Aug 2018 16:50:24 +0800 Subject: [PATCH 036/192] Add field mInitXdpi --- .../java/me/jessyan/autosize/AutoSizeConfig.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java b/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java index 39353b4..23162b0 100644 --- a/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java +++ b/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java @@ -61,6 +61,10 @@ public final class AutoSizeConfig { * 最初的 {@link DisplayMetrics#scaledDensity} */ private float mInitScaledDensity; + /** + * 最初的 {@link DisplayMetrics#xdpi} + */ + private float mInitXdpi; /** * 设计图上的总宽度, 单位 dp */ @@ -172,6 +176,7 @@ AutoSizeConfig init(final Application application, boolean isBaseOnWidth, AutoAd mInitDensity = displayMetrics.density; mInitDensityDpi = displayMetrics.densityDpi; mInitScaledDensity = displayMetrics.scaledDensity; + mInitXdpi = displayMetrics.xdpi; application.registerComponentCallbacks(new ComponentCallbacks() { @Override public void onConfigurationChanged(Configuration newConfig) { @@ -391,6 +396,15 @@ public float getInitScaledDensity() { return mInitScaledDensity; } + /** + * 获取 {@link #mInitXdpi} + * + * @return {@link #mInitXdpi} + */ + public float getInitXdpi() { + return mInitXdpi; + } + /** * 获取使用者在 AndroidManifest 中填写的 Meta 信息 *

From aa38dadc8ad75d3b1f7ba46932a9ea14f099d91f Mon Sep 17 00:00:00 2001 From: JessYan Date: Mon, 27 Aug 2018 16:53:09 +0800 Subject: [PATCH 037/192] Add field xdpi on DisplayMetricsInfo --- .../me/jessyan/autosize/DisplayMetricsInfo.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/DisplayMetricsInfo.java b/autosize/src/main/java/me/jessyan/autosize/DisplayMetricsInfo.java index 44243c4..8c898f9 100644 --- a/autosize/src/main/java/me/jessyan/autosize/DisplayMetricsInfo.java +++ b/autosize/src/main/java/me/jessyan/autosize/DisplayMetricsInfo.java @@ -32,11 +32,13 @@ public class DisplayMetricsInfo implements Parcelable { private float density; private int densityDpi; private float scaledDensity; + private float xdpi; - public DisplayMetricsInfo(float density, int densityDpi, float scaledDensity) { + public DisplayMetricsInfo(float density, int densityDpi, float scaledDensity, float xdpi) { this.density = density; this.densityDpi = densityDpi; this.scaledDensity = scaledDensity; + this.xdpi = xdpi; } public float getDensity() { @@ -63,6 +65,14 @@ public void setScaledDensity(float scaledDensity) { this.scaledDensity = scaledDensity; } + public float getXdpi() { + return xdpi; + } + + public void setXdpi(float xdpi) { + this.xdpi = xdpi; + } + @Override public int describeContents() { return 0; @@ -73,12 +83,14 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeFloat(this.density); dest.writeInt(this.densityDpi); dest.writeFloat(this.scaledDensity); + dest.writeFloat(this.xdpi); } protected DisplayMetricsInfo(Parcel in) { this.density = in.readFloat(); this.densityDpi = in.readInt(); this.scaledDensity = in.readFloat(); + this.xdpi = in.readFloat(); } public static final Creator CREATOR = new Creator() { @@ -99,6 +111,7 @@ public String toString() { "density=" + density + ", densityDpi=" + densityDpi + ", scaledDensity=" + scaledDensity + + ", xdpi=" + xdpi + '}'; } } From cb2ef33c6ebe361bba3dce1d5bb1decc8c5bf178 Mon Sep 17 00:00:00 2001 From: JessYan Date: Mon, 27 Aug 2018 17:02:27 +0800 Subject: [PATCH 038/192] Support unit 'in' --- .../java/me/jessyan/autosize/AutoSize.java | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/AutoSize.java b/autosize/src/main/java/me/jessyan/autosize/AutoSize.java index 5f4f417..42a5fd2 100644 --- a/autosize/src/main/java/me/jessyan/autosize/AutoSize.java +++ b/autosize/src/main/java/me/jessyan/autosize/AutoSize.java @@ -132,7 +132,8 @@ public static void autoConvertDensityBaseOnHeight(Activity activity, float desig /** * 这里是今日头条适配方案的核心代码, 核心在于根据当前设备的实际情况做自动计算并转换 {@link DisplayMetrics#density}、 - * {@link DisplayMetrics#scaledDensity}、{@link DisplayMetrics#densityDpi} 这三个值, 有兴趣请看下面的链接 + * {@link DisplayMetrics#scaledDensity}、{@link DisplayMetrics#densityDpi} 这三个值, 额外增加 {@link DisplayMetrics#xdpi} + * 以支持单位 {@code in} * * @param activity {@link Activity} * @param sizeInDp 设计图上的设计尺寸, 单位 dp, 如果 {@param isBaseOnWidth} 设置为 {@code true}, @@ -156,6 +157,7 @@ public static void autoConvertDensity(Activity activity, float sizeInDp, boolean float targetDensity = 0; int targetDensityDpi = 0; float targetScaledDensity = 0; + float targetXdpi = 0; if (displayMetricsInfo == null) { if (isBaseOnWidth) { @@ -167,18 +169,25 @@ public static void autoConvertDensity(Activity activity, float sizeInDp, boolean getInitScaledDensity() * 1.0f / AutoSizeConfig.getInstance().getInitDensity()); targetDensityDpi = (int) (targetDensity * 160); - mCache.put(key, new DisplayMetricsInfo(targetDensity, targetDensityDpi, targetScaledDensity)); + if (isBaseOnWidth) { + targetXdpi = AutoSizeConfig.getInstance().getScreenWidth() * 1.0f / sizeInDp; + } else { + targetXdpi = AutoSizeConfig.getInstance().getScreenHeight() * 1.0f / sizeInDp; + } + + mCache.put(key, new DisplayMetricsInfo(targetDensity, targetDensityDpi, targetScaledDensity, targetXdpi)); } else { - targetDensity = displayMetricsInfo.density; - targetDensityDpi = displayMetricsInfo.densityDpi; - targetScaledDensity = displayMetricsInfo.scaledDensity; + targetDensity = displayMetricsInfo.getDensity(); + targetDensityDpi = displayMetricsInfo.getDensityDpi(); + targetScaledDensity = displayMetricsInfo.getScaledDensity(); + targetXdpi = displayMetricsInfo.getXdpi(); } - setDensity(activity, targetDensity, targetDensityDpi, targetScaledDensity); + setDensity(activity, targetDensity, targetDensityDpi, targetScaledDensity, targetXdpi); - LogUtils.d(String.format(Locale.ENGLISH, "The %s has been adapted! \n%s Info: isBaseOnWidth = %s, %s = %f, targetDensity = %f, targetScaledDensity = %f, targetDensityDpi = %d" + LogUtils.d(String.format(Locale.ENGLISH, "The %s has been adapted! \n%s Info: isBaseOnWidth = %s, %s = %f, targetDensity = %f, targetScaledDensity = %f, targetDensityDpi = %d, targetXdpi = %f" , activity.getClass().getName(), activity.getClass().getSimpleName(), isBaseOnWidth, isBaseOnWidth ? "designWidthInDp" - : "designHeightInDp", sizeInDp, targetDensity, targetScaledDensity, targetDensityDpi)); + : "designHeightInDp", sizeInDp, targetDensity, targetScaledDensity, targetDensityDpi, targetXdpi)); } /** @@ -189,7 +198,8 @@ public static void autoConvertDensity(Activity activity, float sizeInDp, boolean public static void cancelAdapt(Activity activity) { setDensity(activity, AutoSizeConfig.getInstance().getInitDensity() , AutoSizeConfig.getInstance().getInitDensityDpi() - , AutoSizeConfig.getInstance().getInitScaledDensity()); + , AutoSizeConfig.getInstance().getInitScaledDensity() + , AutoSizeConfig.getInstance().getInitXdpi()); } /** @@ -199,25 +209,26 @@ public static void cancelAdapt(Activity activity) { * @param density {@link DisplayMetrics#density} * @param densityDpi {@link DisplayMetrics#densityDpi} * @param scaledDensity {@link DisplayMetrics#scaledDensity} + * @param xdpi {@link DisplayMetrics#xdpi} */ - private static void setDensity(Activity activity, float density, int densityDpi, float scaledDensity) { + private static void setDensity(Activity activity, float density, int densityDpi, float scaledDensity, float xdpi) { final DisplayMetrics activityDisplayMetrics = activity.getResources().getDisplayMetrics(); final DisplayMetrics appDisplayMetrics = AutoSizeConfig.getInstance().getApplication().getResources().getDisplayMetrics(); - setDensity(activityDisplayMetrics, density, densityDpi, scaledDensity); + setDensity(activityDisplayMetrics, density, densityDpi, scaledDensity, xdpi); - setDensity(appDisplayMetrics, density, densityDpi, scaledDensity); + setDensity(appDisplayMetrics, density, densityDpi, scaledDensity, xdpi); //兼容 MIUI DisplayMetrics activityDisplayMetricsOnMIUI = getMetricsOnMiui(activity.getResources()); DisplayMetrics appDisplayMetricsOnMIUI = getMetricsOnMiui(AutoSizeConfig.getInstance().getApplication().getResources()); if (activityDisplayMetricsOnMIUI != null) { - setDensity(activityDisplayMetricsOnMIUI, density, densityDpi, scaledDensity); + setDensity(activityDisplayMetricsOnMIUI, density, densityDpi, scaledDensity, xdpi); } if (appDisplayMetricsOnMIUI != null) { - setDensity(appDisplayMetricsOnMIUI, density, densityDpi, scaledDensity); + setDensity(appDisplayMetricsOnMIUI, density, densityDpi, scaledDensity, xdpi); } } @@ -228,11 +239,13 @@ private static void setDensity(Activity activity, float density, int densityDpi, * @param density {@link DisplayMetrics#density} * @param densityDpi {@link DisplayMetrics#densityDpi} * @param scaledDensity {@link DisplayMetrics#scaledDensity} + * @param xdpi {@link DisplayMetrics#xdpi} */ - private static void setDensity(DisplayMetrics displayMetrics, float density, int densityDpi, float scaledDensity) { + private static void setDensity(DisplayMetrics displayMetrics, float density, int densityDpi, float scaledDensity, float xdpi) { displayMetrics.density = density; displayMetrics.densityDpi = densityDpi; displayMetrics.scaledDensity = scaledDensity; + displayMetrics.xdpi = xdpi; } /** From 6fcd035830f695b1aebd2e2824118c225a1251fe Mon Sep 17 00:00:00 2001 From: JessYan Date: Mon, 27 Aug 2018 17:13:15 +0800 Subject: [PATCH 039/192] Add AutoSizeUtils#in2px() --- .../main/java/me/jessyan/autosize/utils/AutoSizeUtils.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java b/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java index fb3fbb4..c3a071f 100644 --- a/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java +++ b/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java @@ -40,4 +40,8 @@ public static int dp2px(Context context, float value) { public static int sp2px(Context context, float value) { return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, value, context.getResources().getDisplayMetrics()) + 0.5f); } + + public static int in2px(Context context, float value) { + return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_IN, value, context.getResources().getDisplayMetrics()) + 0.5f); + } } From c3a7e46eb0020b12f3065c3d341f15db30d875a2 Mon Sep 17 00:00:00 2001 From: JessYan Date: Tue, 28 Aug 2018 15:03:47 +0800 Subject: [PATCH 040/192] Create Subunits --- .../me/jessyan/autosize/unit/Subunits.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 autosize/src/main/java/me/jessyan/autosize/unit/Subunits.java diff --git a/autosize/src/main/java/me/jessyan/autosize/unit/Subunits.java b/autosize/src/main/java/me/jessyan/autosize/unit/Subunits.java new file mode 100644 index 0000000..d0aa274 --- /dev/null +++ b/autosize/src/main/java/me/jessyan/autosize/unit/Subunits.java @@ -0,0 +1,53 @@ +/* + * Copyright 2018 JessYan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.jessyan.autosize.unit; + +import android.util.DisplayMetrics; + +/** + * ================================================ + * AndroidAutoSize 支持一些在 Android 系统上比较少见的单位作为副单位, 用于规避修改 {@link DisplayMetrics#density} + * 所带来的对于其他使用 dp 布局的系统控件或三方库控件的不良影响 + *

+ * Created by JessYan on 2018/8/28 10:27 + * Contact me + * Follow me + * ================================================ + */ +public enum Subunits { + /** + * 不使用副单位 + */ + NONE, + /** + * 单位 pt + * + * @see android.util.TypedValue#COMPLEX_UNIT_PT + */ + PT, + /** + * 单位 in + * + * @see android.util.TypedValue#COMPLEX_UNIT_IN + */ + IN, + /** + * 单位 mm + * + * @see android.util.TypedValue#COMPLEX_UNIT_MM + */ + MM +} From dace5efb4d2fce57adc352a82085704e0297d046 Mon Sep 17 00:00:00 2001 From: JessYan Date: Tue, 28 Aug 2018 15:04:15 +0800 Subject: [PATCH 041/192] Create UnitsManager --- .../jessyan/autosize/unit/UnitsManager.java | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 autosize/src/main/java/me/jessyan/autosize/unit/UnitsManager.java diff --git a/autosize/src/main/java/me/jessyan/autosize/unit/UnitsManager.java b/autosize/src/main/java/me/jessyan/autosize/unit/UnitsManager.java new file mode 100644 index 0000000..c143b90 --- /dev/null +++ b/autosize/src/main/java/me/jessyan/autosize/unit/UnitsManager.java @@ -0,0 +1,112 @@ +/* + * Copyright 2018 JessYan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.jessyan.autosize.unit; + +import android.util.DisplayMetrics; + +import me.jessyan.autosize.utils.Preconditions; + +/** + * ================================================ + * 管理 AndroidAutoSize 支持的所有单位, AndroidAutoSize 支持五种单位 (dp、sp、pt、in、mm) + * 其中 dp、sp 这两个是比较常见的单位, 作为 AndroidAutoSize 的主单位, 默认被 AndroidAutoSize 支持 + * pt、in、mm 这三个是比较少见的单位, 只可以选择其中的一个, 作为 AndroidAutoSize 的副单位, 与 dp、sp 一起被 AndroidAutoSize 支持 + * 副单位是用于规避修改 {@link DisplayMetrics#density} 所带来的对于其他使用 dp 布局的系统控件或三方库控件的不良影响 + * 你选择什么单位, 就在 layout 文件中用什么单位布局 + *

+ * 两个主单位和一个副单位, 可以随时使用下面的方法关闭和重新开启对它们的支持 + * 如果你想完全规避修改 {@link DisplayMetrics#density} 所带来的对于其他使用 dp 布局的系统控件或三方库控件的不良影响 + * 那请调用 {@link #setSupportDP}、{@link #setSupportSP} 都设置为 {@code false}, 停止对两个主单位的支持 (如果开启 sp, 对其他三方库控件影响不大, 也可以不关闭对 sp 的支持) + * 并调用 {@link #setSupportSubunits} 从三个冷门单位中选择一个作为副单位 (三个单位的效果都是一样的, 按自己的喜好选择, 比如我就喜欢 mm, 翻译为中文是妹妹的意思) + * 然后在 layout 文件中只使用这个副单位进行布局, 这样就可以完全规避修改 {@link DisplayMetrics#density} 所带来的问题 + * 因为 dp、sp 这两个单位在其他系统控件或三方库控件中都非常常见, 但三个冷门单位却非常少见 + *

+ * Created by JessYan on 2018/8/28 10:21 + * Contact me + * Follow me + * ================================================ + */ +public class UnitsManager { + /** + * 是否支持 dp 单位, 默认支持 + */ + private boolean isSupportDP = true; + /** + * 是否支持 sp 单位, 默认支持 + */ + private boolean isSupportSP = true; + /** + * 是否支持副单位, 以什么为副单位? 默认不支持 + */ + private Subunits mSupportSubunits = Subunits.NONE; + + /** + * 是否支持 dp 单位, 默认支持, 详情请看类文件的注释 {@link UnitsManager} + * + * @return {@code true} 为支持, {@code false} 为不支持 + */ + public boolean isSupportDP() { + return isSupportDP; + } + + /** + * 是否让 AndroidAutoSize 支持 dp 单位, 默认支持, 详情请看类文件的注释 {@link UnitsManager} + * + * @param supportDP {@code true} 为支持, {@code false} 为不支持 + */ + public void setSupportDP(boolean supportDP) { + isSupportDP = supportDP; + } + + /** + * 是否支持 sp 单位, 默认支持, 详情请看类文件的注释 {@link UnitsManager} + * + * @return {@code true} 为支持, {@code false} 为不支持 + */ + public boolean isSupportSP() { + return isSupportSP; + } + + /** + * 是否让 AndroidAutoSize 支持 sp 单位, 默认支持, 详情请看类文件的注释 {@link UnitsManager} + * + * @param supportSP {@code true} 为支持, {@code false} 为不支持 + */ + public void setSupportSP(boolean supportSP) { + isSupportSP = supportSP; + } + + /** + * AndroidAutoSize 以什么单位为副单位, 默认为 {@link Subunits#NONE}, 即不支持副单位, 详情请看类文件的注释 {@link UnitsManager} + * + * @return {@link Subunits} + */ + public Subunits getSupportSubunits() { + return mSupportSubunits; + } + + /** + * 让 AndroidAutoSize 以什么单位为副单位, 在 pt、in、mm 这三个冷门单位中选择一个即可, 三个效果都是一样的 + * 按自己的喜好选择, 比如我就喜欢 mm, 翻译为中文是妹妹的意思 + * 默认为 {@link Subunits#NONE}, 即不支持副单位, 详情请看类文件的注释 {@link UnitsManager} + * + * @param supportSubunits {@link Subunits} + */ + public void setSupportSubunits(Subunits supportSubunits) { + mSupportSubunits = Preconditions.checkNotNull(supportSubunits, + "The supportSubunits can not be null, use Subunits.NONE instead"); + } +} From ca7ef5d9326514d59030a47ff6a1de2770ceaf19 Mon Sep 17 00:00:00 2001 From: JessYan Date: Tue, 28 Aug 2018 15:06:54 +0800 Subject: [PATCH 042/192] Add AutoSizeConfig#getUnitsManager() --- .../java/me/jessyan/autosize/AutoSizeConfig.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java b/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java index 23162b0..148f129 100644 --- a/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java +++ b/autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java @@ -27,6 +27,7 @@ import android.util.DisplayMetrics; import me.jessyan.autosize.external.ExternalAdaptManager; +import me.jessyan.autosize.unit.UnitsManager; import me.jessyan.autosize.utils.LogUtils; import me.jessyan.autosize.utils.Preconditions; import me.jessyan.autosize.utils.ScreenUtils; @@ -49,6 +50,10 @@ public final class AutoSizeConfig { * 用来管理外部三方库 {@link Activity} 的适配 */ private ExternalAdaptManager mExternalAdaptManager = new ExternalAdaptManager(); + /** + * 用来管理 AndroidAutoSize 支持的所有单位, AndroidAutoSize 支持五种单位 (dp、sp、pt、in、mm) + */ + private UnitsManager mUnitsManager = new UnitsManager(); /** * 最初的 {@link DisplayMetrics#density} */ @@ -313,6 +318,15 @@ public ExternalAdaptManager getExternalAdaptManager() { return mExternalAdaptManager; } + /** + * {@link UnitsManager} 用来管理 AndroidAutoSize 支持的所有单位, AndroidAutoSize 支持五种单位 (dp、sp、pt、in、mm) + * + * @return {@link UnitsManager} + */ + public UnitsManager getUnitsManager() { + return mUnitsManager; + } + /** * 返回 {@link #isBaseOnWidth} * From e6c46ae1199544bf54a36e8bce1fb9b02091fd35 Mon Sep 17 00:00:00 2001 From: JessYan Date: Tue, 28 Aug 2018 15:09:34 +0800 Subject: [PATCH 043/192] Improve AutoSize#setDensity --- .../java/me/jessyan/autosize/AutoSize.java | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/autosize/src/main/java/me/jessyan/autosize/AutoSize.java b/autosize/src/main/java/me/jessyan/autosize/AutoSize.java index 42a5fd2..dc7d212 100644 --- a/autosize/src/main/java/me/jessyan/autosize/AutoSize.java +++ b/autosize/src/main/java/me/jessyan/autosize/AutoSize.java @@ -242,10 +242,28 @@ private static void setDensity(Activity activity, float density, int densityDpi, * @param xdpi {@link DisplayMetrics#xdpi} */ private static void setDensity(DisplayMetrics displayMetrics, float density, int densityDpi, float scaledDensity, float xdpi) { - displayMetrics.density = density; - displayMetrics.densityDpi = densityDpi; - displayMetrics.scaledDensity = scaledDensity; - displayMetrics.xdpi = xdpi; + if (AutoSizeConfig.getInstance().getUnitsManager().isSupportDP()) { + displayMetrics.density = density; + displayMetrics.densityDpi = densityDpi; + } + if (AutoSizeConfig.getInstance().getUnitsManager().isSupportSP()) { + displayMetrics.scaledDensity = scaledDensity; + } + switch (AutoSizeConfig.getInstance().getUnitsManager().getSupportSubunits()) { + case NONE: + break; + case PT: + displayMetrics.xdpi = xdpi * 72f; + break; + case IN: + displayMetrics.xdpi = xdpi; + break; + case MM: + displayMetrics.xdpi = xdpi * 25.4f; + break; + default: + break; + } } /** From c2f99d658014d0e3b3b70d0441173b465b7b9439 Mon Sep 17 00:00:00 2001 From: JessYan Date: Tue, 28 Aug 2018 15:15:40 +0800 Subject: [PATCH 044/192] Add AutoSizeUtils#pt2px() and AutoSizeUtils#mm2px() --- .../java/me/jessyan/autosize/utils/AutoSizeUtils.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java b/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java index c3a071f..3c03a64 100644 --- a/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java +++ b/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java @@ -41,7 +41,15 @@ public static int sp2px(Context context, float value) { return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, value, context.getResources().getDisplayMetrics()) + 0.5f); } + public static int pt2px(Context context, float value) { + return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PT, value, context.getResources().getDisplayMetrics()) + 0.5f); + } + public static int in2px(Context context, float value) { return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_IN, value, context.getResources().getDisplayMetrics()) + 0.5f); } + + public static int mm2px(Context context, float value) { + return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, value, context.getResources().getDisplayMetrics()) + 0.5f); + } } From 69b270450e6bfcbfd4d963b1012aeb57db754345 Mon Sep 17 00:00:00 2001 From: JessYan Date: Tue, 28 Aug 2018 15:26:41 +0800 Subject: [PATCH 045/192] Release to v0.9.0 --- README-zh.md | 4 ++-- README.md | 4 ++-- build.gradle | 4 ++-- demo/build.gradle | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README-zh.md b/README-zh.md index 0fe452c..c76900b 100644 --- a/README-zh.md +++ b/README-zh.md @@ -2,7 +2,7 @@

- Latest Stable Version + Latest Stable Version Build Status @@ -70,7 +70,7 @@ ## Download ``` gradle - implementation 'me.jessyan:autosize:0.8.0' + implementation 'me.jessyan:autosize:0.9.0' ``` ## Usage diff --git a/README.md b/README.md index ba4ba6c..6d76d31 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

- Latest Stable Version + Latest Stable Version Build Status @@ -72,7 +72,7 @@ ## Download ``` gradle - implementation 'me.jessyan:autosize:0.8.0' + implementation 'me.jessyan:autosize:0.9.0' ``` ## Usage (just one steps) diff --git a/build.gradle b/build.gradle index 7262b49..59bf744 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,6 @@ ext { targetSdkVersion = 27 compileSdkVersion = 27 buildToolsVersion = "27.0.3" - versionCode = 18 - versionName = "0.8.0" + versionCode = 20 + versionName = "0.9.0" } \ No newline at end of file diff --git a/demo/build.gradle b/demo/build.gradle index 75e8ed1..b754111 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -21,7 +21,7 @@ android { } dependencies { -// implementation 'me.jessyan:autosize:0.8.0' +// implementation 'me.jessyan:autosize:0.9.0' implementation project(':autosize') implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'cat.ereza:customactivityoncrash:2.2.0' From 56f5657c0caf1ec45181f701083b94b4a38f9aa3 Mon Sep 17 00:00:00 2001 From: JessYan Date: Tue, 28 Aug 2018 17:09:30 +0800 Subject: [PATCH 046/192] Create demo-subunits --- demo-subunits/.gitignore | 1 + demo-subunits/build.gradle | 29 +++ demo-subunits/proguard-rules.pro | 21 +++ .../demo/ExampleInstrumentedTest.java | 26 +++ demo-subunits/src/main/AndroidManifest.xml | 31 ++++ .../demo/subunits/BaseApplication.java | 101 +++++++++++ .../demo/subunits/CustomAdaptActivity.java | 71 ++++++++ .../autosize/demo/subunits/MainActivity.java | 104 +++++++++++ .../drawable-v24/ic_launcher_foreground.xml | 34 ++++ .../res/drawable/ic_launcher_background.xml | 171 ++++++++++++++++++ .../main/res/layout/activity_custom_adapt.xml | 61 +++++++ .../src/main/res/layout/activity_main.xml | 116 ++++++++++++ demo-subunits/src/main/res/layout/test.xml | 12 ++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/autosize_logo.png | Bin 0 -> 31276 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes demo-subunits/src/main/res/values/colors.xml | 6 + demo-subunits/src/main/res/values/strings.xml | 3 + demo-subunits/src/main/res/values/styles.xml | 11 ++ .../autosize/demo/ExampleUnitTest.java | 17 ++ settings.gradle | 2 +- 31 files changed, 826 insertions(+), 1 deletion(-) create mode 100644 demo-subunits/.gitignore create mode 100644 demo-subunits/build.gradle create mode 100644 demo-subunits/proguard-rules.pro create mode 100644 demo-subunits/src/androidTest/java/me/jessyan/autosize/demo/ExampleInstrumentedTest.java create mode 100644 demo-subunits/src/main/AndroidManifest.xml create mode 100644 demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/BaseApplication.java create mode 100644 demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/CustomAdaptActivity.java create mode 100644 demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/MainActivity.java create mode 100644 demo-subunits/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 demo-subunits/src/main/res/drawable/ic_launcher_background.xml create mode 100644 demo-subunits/src/main/res/layout/activity_custom_adapt.xml create mode 100644 demo-subunits/src/main/res/layout/activity_main.xml create mode 100644 demo-subunits/src/main/res/layout/test.xml create mode 100644 demo-subunits/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 demo-subunits/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 demo-subunits/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 demo-subunits/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 demo-subunits/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 demo-subunits/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 demo-subunits/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 demo-subunits/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 demo-subunits/src/main/res/mipmap-xxhdpi/autosize_logo.png create mode 100644 demo-subunits/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 demo-subunits/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 demo-subunits/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 demo-subunits/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 demo-subunits/src/main/res/values/colors.xml create mode 100644 demo-subunits/src/main/res/values/strings.xml create mode 100644 demo-subunits/src/main/res/values/styles.xml create mode 100644 demo-subunits/src/test/java/me/jessyan/autosize/demo/ExampleUnitTest.java diff --git a/demo-subunits/.gitignore b/demo-subunits/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/demo-subunits/.gitignore @@ -0,0 +1 @@ +/build diff --git a/demo-subunits/build.gradle b/demo-subunits/build.gradle new file mode 100644 index 0000000..1ec5f29 --- /dev/null +++ b/demo-subunits/build.gradle @@ -0,0 +1,29 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion rootProject.compileSdkVersion + buildToolsVersion rootProject.buildToolsVersion + + defaultConfig { + applicationId "me.jessyan.autosize.demo.subunits" + minSdkVersion rootProject.minSdkVersion + targetSdkVersion rootProject.targetSdkVersion + versionCode rootProject.versionCode + versionName rootProject.versionName + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { +// implementation 'me.jessyan:autosize:0.9.0' + implementation project(':autosize') + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'cat.ereza:customactivityoncrash:2.2.0' + testImplementation 'junit:junit:4.12' +} diff --git a/demo-subunits/proguard-rules.pro b/demo-subunits/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/demo-subunits/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/demo-subunits/src/androidTest/java/me/jessyan/autosize/demo/ExampleInstrumentedTest.java b/demo-subunits/src/androidTest/java/me/jessyan/autosize/demo/ExampleInstrumentedTest.java new file mode 100644 index 0000000..58ce35c --- /dev/null +++ b/demo-subunits/src/androidTest/java/me/jessyan/autosize/demo/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package me.jessyan.autosize.demo; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("me.jessyan.autosize.demo", appContext.getPackageName()); + } +} diff --git a/demo-subunits/src/main/AndroidManifest.xml b/demo-subunits/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e5fb5fb --- /dev/null +++ b/demo-subunits/src/main/AndroidManifest.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/BaseApplication.java b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/BaseApplication.java new file mode 100644 index 0000000..6329620 --- /dev/null +++ b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/BaseApplication.java @@ -0,0 +1,101 @@ +/* + * Copyright 2018 JessYan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.jessyan.autosize.demo.subunits; + +import android.app.Activity; +import android.app.Application; + +import cat.ereza.customactivityoncrash.activity.DefaultErrorActivity; +import me.jessyan.autosize.AutoSizeConfig; +import me.jessyan.autosize.external.ExternalAdaptInfo; +import me.jessyan.autosize.external.ExternalAdaptManager; +import me.jessyan.autosize.internal.CustomAdapt; +import me.jessyan.autosize.unit.Subunits; + +/** + * ================================================ + * 本框架核心原理来自于 今日头条官方适配方案 + *

+ * 本框架源码的注释都很详细, 欢迎阅读学习 + *

+ * AndroidAutoSize 会在 APP 启动时自动完成初始化, 如果您想设置自定义参数可以在 {@link Application#onCreate()} 中设置 + *

+ * Created by JessYan on 2018/8/9 17:05 + * Contact me + * Follow me + * ================================================ + */ +public class BaseApplication extends Application { + @Override + public void onCreate() { + super.onCreate(); + /** + * 以下是 AndroidAutoSize 可以自定义的参数, {@link AutoSizeConfig} 的每个方法的注释都写的很详细 + * 使用前请一定记得跳进源码,查看方法的注释, 下面的注释只是简单描述!!! + */ + AutoSizeConfig.getInstance() + + //是否让框架支持自定义 Fragment 的适配参数, 由于这个需求是比较少见的, 所以须要使用者手动开启 + //如果没有这个需求建议不开启 + .setCustomFragment(true) + + //是否打印 AutoSize 的内部日志, 默认为 true, 如果您不想 AutoSize 打印日志, 则请设置为 false +// .setLog(false) + + //是否使用设备的实际尺寸做适配, 默认为 false, 如果设置为 false, 在以屏幕高度为基准进行适配时 + //AutoSize 会将屏幕总高度减去状态栏高度来做适配, 如果设备上有导航栏还会减去导航栏的高度 + //设置为 true 则使用设备的实际屏幕高度, 不会减去状态栏以及导航栏高度 +// .setUseDeviceSize(true) + + //是否全局按照宽度进行等比例适配, 默认为 true, 如果设置为 false, AutoSize 会全局按照高度进行适配 +// .setBaseOnWidth(false) + + //设置屏幕适配逻辑策略类, 一般不用设置, 使用框架默认的就好 +// .setAutoAdaptStrategy(new AutoAdaptStrategy()) + ; + customAdaptForExternal(); +// AutoSizeConfig.getInstance().getUnitsManager().setSupportDP(false); + AutoSizeConfig.getInstance().getUnitsManager().setSupportSP(false); + AutoSizeConfig.getInstance().getUnitsManager().setSupportSubunits(Subunits.MM); + } + + /** + * 给外部的三方库 {@link Activity} 自定义适配参数, 因为三方库的 {@link Activity} 并不能通过实现 + * {@link CustomAdapt} 接口的方式来提供自定义适配参数 (因为远程依赖改不了源码) + * 所以使用 {@link ExternalAdaptManager} 来替代实现接口的方式, 来提供自定义适配参数 + */ + private void customAdaptForExternal() { + /** + * {@link ExternalAdaptManager} 是一个管理外部三方库的适配信息和状态的管理类, 详细介绍请看 {@link ExternalAdaptManager} 的类注释 + */ + AutoSizeConfig.getInstance().getExternalAdaptManager() + + //加入的 Activity 将会放弃屏幕适配, 一般用于三方库的 Activity, 详情请看方法注释 + //如果不想放弃三方库页面的适配, 请用 addExternalAdaptInfoOfActivity 方法, 建议对三方库页面进行适配, 让自己的 App 更完美一点 +// .addCancelAdaptOfActivity(DefaultErrorActivity.class) + + //为指定的 Activity 提供自定义适配参数, AndroidAutoSize 将会按照提供的适配参数进行适配, 详情请看方法注释 + //一般用于三方库的 Activity, 因为三方库的设计图尺寸可能和项目自身的设计图尺寸不一致, 所以要想完美适配三方库的页面 + //就需要提供三方库的设计图尺寸, 以及适配的方向 (以宽为基准还是高为基准?) + //三方库页面的设计图尺寸可能无法获知, 所以如果想让三方库的适配效果达到最好, 只有靠不断的尝试 + //由于 AndroidAutoSize 可以让布局在所有设备上都等比例缩放, 所以只要你在一个设备上测试出了一个最完美的设计图尺寸 + //那这个三方库页面在其他设备上也会呈现出同样的适配效果, 等比例缩放, 所以也就完成了三方库页面的屏幕适配 + //即使在不改三方库源码的情况下也可以完美适配三方库的页面, 这就是 AndroidAutoSize 的优势 + //但前提是三方库页面的布局使用的是 dp 和 sp, 如果布局全部使用的 px, 那 AndroidAutoSize 也将无能为力 + //经过测试 DefaultErrorActivity 的设计图宽度在 380dp - 400dp 显示效果都是比较舒服的 + .addExternalAdaptInfoOfActivity(DefaultErrorActivity.class, new ExternalAdaptInfo(true, 400)); + } +} diff --git a/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/CustomAdaptActivity.java b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/CustomAdaptActivity.java new file mode 100644 index 0000000..e3b7a4e --- /dev/null +++ b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/CustomAdaptActivity.java @@ -0,0 +1,71 @@ +/* + * Copyright 2018 JessYan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.jessyan.autosize.demo.subunits; + +import android.app.Activity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; + +import me.jessyan.autosize.internal.CustomAdapt; + +/** + * ================================================ + * 本框架核心原理来自于 今日头条官方适配方案 + *

+ * {@link CustomAdaptActivity} 展示项目内部的 {@link Activity} 自定义适配参数的用法, 需要实现 {@link CustomAdapt} + * 现在 AndroidAutoSize 是全局以屏幕宽度为基准进行适配的, 并且全局的设计图尺寸为 360 * 640 + * 这里就展示怎么让 {@link CustomAdaptActivity} 单个页面, 有别于全局设置, 以屏幕高度为基准进行适配, 并且更改设计图尺寸为 IPhone 的设计图尺寸 + * 如果这个页面的设计图尺寸有别于其他页面, AndroidAutoSize 允许您改变单个页面的设计图尺寸, {@link #getSizeInDp()} + *

+ * Created by JessYan on 2018/8/11 11:31 + * Contact me + * Follow me + * ================================================ + */ +public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_custom_adapt); + } + + /** + * 是否按照宽度进行等比例适配 (为了保证在高宽比不同的屏幕上也能正常适配, 所以只能在宽度和高度之中选一个作为基准进行适配) + * + * @return {@code true} 为按照宽度适配, {@code false} 为按照高度适配 + */ + @Override + public boolean isBaseOnWidth() { + return false; + } + + /** + * 这里使用 IPhone 的设计图, IPhone 的设计图尺寸为 750px * 1334px, 高换算成 dp 为 667 (1334px / 2 = 667dp) + *

+ * 返回设计图上的设计尺寸, 单位 dp + * {@link #getSizeInDp} 须配合 {@link #isBaseOnWidth()} 使用, 规则如下: + * 如果 {@link #isBaseOnWidth()} 返回 {@code true}, {@link #getSizeInDp} 则应该返回设计图的总宽度 + * 如果 {@link #isBaseOnWidth()} 返回 {@code false}, {@link #getSizeInDp} 则应该返回设计图的总高度 + * 如果您不需要自定义设计图上的设计尺寸, 想继续使用在 AndroidManifest 中填写的设计图尺寸, {@link #getSizeInDp} 则返回 {@code 0} + * + * @return 设计图上的设计尺寸, 单位 dp + */ + @Override + public float getSizeInDp() { + return 667; + } +} diff --git a/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/MainActivity.java b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/MainActivity.java new file mode 100644 index 0000000..793400c --- /dev/null +++ b/demo-subunits/src/main/java/me/jessyan/autosize/demo/subunits/MainActivity.java @@ -0,0 +1,104 @@ +/* + * Copyright 2018 JessYan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.jessyan.autosize.demo.subunits; + +import android.app.Activity; +import android.app.Dialog; +import android.app.Fragment; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.Toast; + +import cat.ereza.customactivityoncrash.activity.DefaultErrorActivity; +import cat.ereza.customactivityoncrash.config.CaocConfig; +import me.jessyan.autosize.AutoSizeConfig; +import me.jessyan.autosize.internal.CustomAdapt; + +/** + * ================================================ + * 本框架核心原理来自于 今日头条官方适配方案 + * 此方案不光可以适配 {@link Activity}, 这个 {@link Activity} 下的所有 {@link Fragment}、{@link Dialog}、{@link View} 都会自动适配 + *

+ * {@link MainActivity} 是以屏幕宽度为基准进行适配的, 并且使用的是在 AndroidManifest 中填写的全局设计图尺寸 360 * 640 + * 不懂什么叫基准的话, 请看 {@link AutoSizeConfig#isBaseOnWidth}) 的注释, AndroidAutoSize 默认全局以屏幕宽度为基准进行适配 + * 如果想更改为全局以屏幕高度为基准进行适配, 请在 {@link BaseApplication} 中按注释中更改, 为什么强调全局? + * 因为 AndroidAutoSize 允许每个 {@link Activity} 可以自定义适配参数, 自定义适配参数通过实现 {@link CustomAdapt} + * 如果不自定义适配参数就会使用全局的适配参数, 全局适配参数在 {@link BaseApplication} 中按注释设置 + *

+ * Created by JessYan on 2018/8/9 17:05 + * Contact me + * Follow me + * ================================================ + */ +//实现 CancelAdapt 即可取消当前 Activity 的屏幕适配, 并且这个 Activity 下的所有 Fragment 和 View 都会被取消适配 +//public class MainActivity extends AppCompatActivity implements CancelAdapt { +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + } + + /** + * 需要注意的是暂停 AndroidAutoSize 后, AndroidAutoSize 只是停止了对后续还没有启动的 {@link Activity} 进行适配的工作 + * 但对已经启动且已经适配的 {@link Activity} 不会有任何影响 + * + * @param view {@link View} + */ + public void stop(View view) { + Toast.makeText(getApplicationContext(), "AndroidAutoSize stops working!", Toast.LENGTH_SHORT).show(); + AutoSizeConfig.getInstance().stop(this); + } + + /** + * 需要注意的是重新启动 AndroidAutoSize 后, AndroidAutoSize 只是重新开始了对后续还没有启动的 {@link Activity} 进行适配的工作 + * 但对已经启动且在 stop 期间未适配的 {@link Activity} 不会有任何影响 + * + * @param view {@link View} + */ + public void restart(View view) { + Toast.makeText(getApplicationContext(), "AndroidAutoSize continues to work", Toast.LENGTH_SHORT).show(); + AutoSizeConfig.getInstance().restart(); + } + + /** + * 跳转到 {@link CustomAdaptActivity}, 展示项目内部的 {@link Activity} 自定义适配参数的用法 + * + * @param view {@link View} + */ + public void goCustomAdaptActivity(View view) { + startActivity(new Intent(getApplicationContext(), CustomAdaptActivity.class)); + } + + /** + * 跳转到三方库的 {@link Activity}, 展示项目外部某些三方库的 {@link Activity} 自定义适配参数的用法 + * 跳转前要先在 {@link BaseApplication#customAdaptForExternal()} 中给外部的三方库 {@link Activity} 自定义适配参数 + * + * @param view {@link View} + */ + public void goThirdLibraryActivity(View view) { + //这里就是随便找个三方库的 Activity, 测试下适配三方库页面的功能是否可用 + //以下代码就是为了启动这个三方库的 Activity, 不必在意 + Intent intent = new Intent(getApplicationContext(), DefaultErrorActivity.class); + Bundle extras = new Bundle(); + extras.putSerializable("cat.ereza.customactivityoncrash.EXTRA_CONFIG", CaocConfig.Builder.create().get()); + intent.putExtras(extras); + startActivity(intent); + } +} diff --git a/demo-subunits/src/main/res/drawable-v24/ic_launcher_foreground.xml b/demo-subunits/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c3903ed --- /dev/null +++ b/demo-subunits/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/demo-subunits/src/main/res/drawable/ic_launcher_background.xml b/demo-subunits/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..5713f34 --- /dev/null +++ b/demo-subunits/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo-subunits/src/main/res/layout/activity_custom_adapt.xml b/demo-subunits/src/main/res/layout/activity_custom_adapt.xml new file mode 100644 index 0000000..f087d37 --- /dev/null +++ b/demo-subunits/src/main/res/layout/activity_custom_adapt.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demo-subunits/src/main/res/layout/activity_main.xml b/demo-subunits/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..a83ba2e --- /dev/null +++ b/demo-subunits/src/main/res/layout/activity_main.xml @@ -0,0 +1,116 @@ + + + + + +