MCPcopy Index your code
hub / github.com/JessYanCoding/AndroidAutoSize

github.com/JessYanCoding/AndroidAutoSize @v1.2.1 sqlite

repository ↗ · DeepWiki ↗ · release v1.2.1 ↗
286 symbols 723 edges 45 files 154 documented · 54%
README

Logo Official

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

Download

 implementation 'me.jessyan:autosize:1.2.1'

Usage

Step 1 (真的不吹牛逼,只需要以下这一步,框架就可以对项目中的所有页面进行适配)

  • 请在 AndroidManifest 中填写全局设计图尺寸 (单位 dp),如果使用副单位,则可以直接填写像素尺寸,不需要再将像素转化为 dp,详情请查看 demo-subunits
<manifest>
    <application>            
        <meta-data
            android:name="design_width_in_dp"
            android:value="360"/>
        <meta-data
            android:name="design_height_in_dp"
            android:value="640"/>           
     </application>           
</manifest>

Preview

  • 布局时的实时预览在开发阶段是一个很重要的环节,很多情况下 Android Studio 提供的默认预览设备并不能完全展示我们的设计图,所以我们就需要自己创建模拟设备,下面就介绍下 dp、pt、in、mm 这四种单位的模拟设备创建方法

  • 如果您在预览时不希望在 Preview 中出现状态栏和导航栏, 则可以根据下图选择 panel 主题,使用该主题后纵向分辨率刚好填充整个预览页面,显示效果完全和设计图一致 theme

  • 为了方便广大新手,所以还是将创建模拟设备的步骤贴出来,为大家操碎了心,如果觉得 AndroidAutoSize 不错,请一定记得 star,并将 AndroidAutoSize 推荐给您的伙伴们 create step

DP

  • 如果您在 layout 文件中使用 dp 作为单位进行布局 (AndroidAutoSize 默认支持 dp、sp 进行布局),则可以根据公式 (sqrt(纵向分辨率^2+横向分辨率^2))/dpi 求出屏幕尺寸,然后创建模拟设备 (只用填写屏幕尺寸和分辨率) dp

PT

  • 如果您在 layout 文件中使用 pt 作为单位进行布局 (需要通过 AutoSizeConfig.getInstance().getUnitsManager().setSupportSubunits(Subunits.PT); 打开对单位 pt 的支持),则可以根据公式 (sqrt(纵向分辨率^2+横向分辨率^2))/72 求出屏幕尺寸,然后创建模拟设备 (只用填写屏幕尺寸和分辨率) pt

IN

  • 如果您在 layout 文件中使用 in 作为单位进行布局 (需要通过 AutoSizeConfig.getInstance().getUnitsManager().setSupportSubunits(Subunits.IN); 打开对单位 in 的支持),则可以根据公式 sqrt(纵向分辨率^2+横向分辨率^2) 求出屏幕尺寸,然后创建模拟设备 (只用填写屏幕尺寸和分辨率) in

MM

  • 如果您在 layout 文件中使用 mm 作为单位进行布局 (需要通过 AutoSizeConfig.getInstance().getUnitsManager().setSupportSubunits(Subunits.MM); 打开对单位 mm 的支持),则可以根据公式 (sqrt(纵向分辨率^2+横向分辨率^2))/25.4 求出屏幕尺寸,然后创建模拟设备 (只用填写屏幕尺寸和分辨率) mm

Advanced (以下用法看不懂?答应我,认真看 demo 好不好?)

Activity

  • 当某个 Activity 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数
public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt {

    @Override
    public boolean isBaseOnWidth() {
        return false;
    }

    @Override
    public float getSizeInDp() {
        return 667;
    }
}
  • 当某个 Activity 想放弃适配,请实现 CancelAdapt 接口
public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt {

}

Fragment

  • 首先开启支持 Fragment 自定义参数的功能
AutoSizeConfig.getInstance().setCustomFragment(true);
  • 当某个 Fragment 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数
public class CustomAdaptFragment extends Fragment implements CustomAdapt {

    @Override
    public boolean isBaseOnWidth() {
        return false;
    }

    @Override
    public float getSizeInDp() {
        return 667;
    }
}
  • 当某个 Fragment 想放弃适配,请实现 CancelAdapt 接口
public class CancelAdaptFragment extends Fragment implements CancelAdapt {

}

Subunits (请认真看 demo-subunits,里面有详细介绍)

  • 可以在 pt、in、mm 这三个冷门单位中,选择一个作为副单位,副单位是用于规避修改 DisplayMetrics#density 所造成的对于其他使用 dp 布局的系统控件或三方库控件的不良影响,使用副单位后可直接填写设计图上的像素尺寸,不需要再将像素转化为 dp
AutoSizeConfig.getInstance().getUnitsManager()
        .setSupportDP(false)
        .setSupportSP(false)
        .setSupportSubunits(Subunits.MM);

About Me

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.

Extension points exported contracts — how you extend this code

CustomAdapt (Interface)
================================================ 如果某些页面不想使用 AndroidAutoSize 初始化时设置的默认适配参数, 请让该页面 Activity 实现此接口 [23 implementers]
autosize/src/main/java/me/jessyan/autosize/internal/CustomAdapt.java
AutoAdaptStrategy (Interface)
================================================ 屏幕适配逻辑策略类, 可通过 {@link AutoSizeConfig#init(Application, boolean, AutoAda [4 …
autosize/src/main/java/me/jessyan/autosize/AutoAdaptStrategy.java
onAdaptListener (Interface)
================================================ 屏幕适配监听器,用于监听屏幕适配时的一些事件 Created by JessYan on 2018/10/30 16:29 <a hr [2 …
autosize/src/main/java/me/jessyan/autosize/onAdaptListener.java
CancelAdapt (Interface)
================================================ AndroidAutoSize 默认项目中的所有模块都使用适配功能, 三方库的 Activity 也不例外 如果某个页面不想使
autosize/src/main/java/me/jessyan/autosize/internal/CancelAdapt.java

Core symbols most depended-on inside this repo

getInstance
called by 101
autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java
getUnitsManager
called by 18
autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java
checkNotNull
called by 18
autosize/src/main/java/me/jessyan/autosize/utils/Preconditions.java
format
called by 18
autosize/src/main/java/me/jessyan/autosize/utils/Preconditions.java
d
called by 11
autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeLog.java
autoConvertDensity
called by 10
autosize/src/main/java/me/jessyan/autosize/AutoSize.java
checkArgument
called by 10
autosize/src/main/java/me/jessyan/autosize/utils/Preconditions.java
isBaseOnWidth
called by 10
autosize/src/main/java/me/jessyan/autosize/internal/CustomAdapt.java

Shape

Method 241
Class 40
Interface 4
Enum 1

Languages

Java100%

Modules by API surface

autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java48 symbols
autosize/src/main/java/me/jessyan/autosize/DisplayMetricsInfo.java19 symbols
autosize/src/main/java/me/jessyan/autosize/AutoSize.java15 symbols
autosize/src/main/java/me/jessyan/autosize/unit/UnitsManager.java14 symbols
autosize/src/main/java/me/jessyan/autosize/utils/Preconditions.java13 symbols
autosize/src/main/java/me/jessyan/autosize/AutoSizeCompat.java12 symbols
autosize/src/main/java/me/jessyan/autosize/external/ExternalAdaptInfo.java11 symbols
autosize/src/main/java/me/jessyan/autosize/ActivityLifecycleCallbacksImpl.java10 symbols
autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java8 symbols
autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeLog.java7 symbols
autosize/src/main/java/me/jessyan/autosize/external/ExternalAdaptManager.java7 symbols
autosize/src/main/java/me/jessyan/autosize/InitProvider.java7 symbols

For agents

$ claude mcp add AndroidAutoSize \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact