package me.common.autosize;
import android.app.Activity;
import android.app.Application;
import android.content.ComponentCallbacks;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import androidx.fragment.app.Fragment;
import android.util.DisplayMetrics;
import java.lang.reflect.Field;
import me.common.autosize.external.ExternalAdaptManager;
import me.common.autosize.unit.UnitsManager;
import me.common.autosize.utils.LogUtils;
import me.common.autosize.utils.Preconditions;
import me.common.autosize.utils.ScreenUtils;
/**
* ================================================
* AndroidAutoSize 参数配置类, 给 AndroidAutoSize 配置一些必要的自定义参数
* ================================================
*/
public final class AutoSizeConfig {
private static volatile AutoSizeConfig sInstance;
private static final String KEY_DESIGN_WIDTH_IN_DP = "design_width_in_dp";
private static final String KEY_DESIGN_HEIGHT_IN_DP = "design_height_in_dp";
private Application mApplication;
/**
* 用来管理外部三方库 {@link Activity} 的适配
*/
private ExternalAdaptManager mExternalAdaptManager = new ExternalAdaptManager();
/**
* 用来管理 AndroidAutoSize 支持的所有单位, AndroidAutoSize 支持五种单位 (dp、sp、pt、in、mm)
*/
private UnitsManager mUnitsManager = new UnitsManager();
/**
* 最初的 {@link DisplayMetrics#density}
*/
private float mInitDensity = -1;
/**
* 最初的 {@link DisplayMetrics#densityDpi}
*/
private int mInitDensityDpi;
/**
* 最初的 {@link DisplayMetrics#scaledDensity}
*/
private float mInitScaledDensity;
/**
* 最初的 {@link DisplayMetrics#xdpi}
*/
private float mInitXdpi;
/**
* 最初的 {@link Configuration#screenWidthDp}
*/
private int mInitScreenWidthDp;
/**
* 最初的 {@link Configuration#screenHeightDp}
*/
private int mInitScreenHeightDp;
/**
* 设计图上的总宽度, 单位 dp
*/
private int mDesignWidthInDp;
/**
* 设计图上的总高度, 单位 dp
*/
private int mDesignHeightInDp;
/**
* 设备的屏幕总宽度, 单位 px
*/
private int mScreenWidth;
/**
* 设备的屏幕总高度, 单位 px, 如果 {@link #isUseDeviceSize} 为 {@code false}, 屏幕总高度会减去状态栏的高度
*/
private int mScreenHeight;
/**
* 状态栏高度, 当 {@link #isUseDeviceSize} 为 {@code false} 时, AndroidAutoSize 会将 {@link #mScreenHeight} 减去状态栏高度
* AndroidAutoSize 默认使用 {@link ScreenUtils#getStatusBarHeight()} 方法获取状态栏高度
* AndroidAutoSize 使用者可使用 {@link #setStatusBarHeight(int)} 自行设置状态栏高度
*/
private int mStatusBarHeight;
/**
* 为了保证在不同高宽比的屏幕上显示效果也能完全一致, 所以本方案适配时是以设计图宽度与设备实际宽度的比例或设计图高度与设备实际高度的比例应用到
* 每个 View 上 (只能在宽度和高度之中选一个作为基准), 从而使每个 View 的高和宽用同样的比例缩放, 避免在与设计图高宽比不一致的设备上出现适配的 View 高或宽变形的问题
* {@link #isBaseOnWidth} 为 {@code true} 时代表以宽度等比例缩放, {@code false} 代表以高度等比例缩放
* {@link #isBaseOnWidth} 为全局配置, 默认为 {@code true}, 每个 {@link Activity} 也可以单独选择使用高或者宽做等比例缩放
*/
private boolean isBaseOnWidth = true;
/**
* 此字段表示是否使用设备的实际尺寸做适配
* {@link #isUseDeviceSize} 为 {@code true} 表示屏幕高度 {@link #mScreenHeight} 包含状态栏的高度
* {@link #isUseDeviceSize} 为 {@code false} 表示 {@link #mScreenHeight} 会减去状态栏的高度, 默认为 {@code true}
*/
private boolean isUseDeviceSize = true;
/**
* {@link #mActivityLifecycleCallbacks} 可用来代替在 BaseActivity 中加入适配代码的传统方式
* {@link #mActivityLifecycleCallbacks} 这种方案类似于 AOP, 面向接口, 侵入性低, 方便统一管理, 扩展性强, 并且也支持适配三方库的 {@link Activity}
*/
private ActivityLifecycleCallbacksImpl mActivityLifecycleCallbacks;
/**
* 框架具有 热插拔 特性, 支持在项目运行中动态停止和重新启动适配功能
*
* @see #stop(Activity)
* @see #restart()
*/
private boolean isStop;
/**
* 是否让框架支持自定义 {@link Fragment} 的适配参数, 由于这个需求是比较少见的, 所以须要使用者手动开启
*/
private boolean isCustomFragment;
/**
* 屏幕方向, {@code true} 为纵向, {@code false} 为横向
*/
private boolean isVertical;
/**
* 是否屏蔽系统字体大小对 AndroidAutoSize 的影响, 如果为 {@code true}, App 内的字体的大小将不会跟随系统设置中字体大小的改变
* 如果为 {@code false}, 则会跟随系统设置中字体大小的改变, 默认为 {@code false}
*/
private boolean isExcludeFontScale;
/**
* 是否是 Miui 系统
*/
private boolean isMiui;
/**
* Miui 系统中的 mTmpMetrics 字段
*/
private Field mTmpMetricsField;
/**
* 屏幕适配监听器,用于监听屏幕适配时的一些事件
*/
private onAdaptListener mOnAdaptListener;
public static AutoSizeConfig getInstance() {
if (sInstance == null) {
synchronized (AutoSizeConfig.class) {
if (sInstance == null) {
sInstance = new AutoSizeConfig();
}
}
}
return sInstance;
}
private AutoSizeConfig() {
}
public Application getApplication() {
Preconditions.checkNotNull(mApplication, "Please call the AutoSizeConfig#init() first");
return mApplication;
}
/**
* v0.7.0 以后, 框架会在 APP 启动时自动调用此方法进行初始化, 使用者无需手动初始化, 初始化方法只能调用一次, 否则报错
* 此方法默认使用以宽度进行等比例适配, 如想使用以高度进行等比例适配, 请调用 {@link #init(Application, boolean)}
*
* @param application {@link Application}
*/
AutoSizeConfig init(Application application) {
return init(application, true, null);
}
/**
* v0.7.0 以后, 框架会在 APP 启动时自动调用此方法进行初始化, 使用者无需手动初始化, 初始化方法只能调用一次, 否则报错
* 此方法使用默认的 {@link AutoAdaptStrategy} 策略, 如想使用自定义的 {@link AutoAdaptStrategy} 策略
* 请调用 {@link #init(Application, boolean, AutoAdaptStrategy)}
*
* @param application {@link Application}
* @param isBaseOnWidth 详情请查看 {@link #isBaseOnWidth} 的注释
*/
AutoSizeConfig init(Application application, boolean isBaseOnWidth) {
return init(application, isBaseOnWidth, null);
}
/**
* v0.7.0 以后, 框架会在 APP 启动时自动调用此方法进行初始化, 使用者无需手动初始化, 初始化方法只能调用一次, 否则报错
*
* @param application {@link Application}
* @param isBaseOnWidth 详情请查看 {@link #isBaseOnWidth} 的注释
* @param strategy {@link AutoAdaptStrategy}, 传 {@code null} 则使用 {@link DefaultAutoAdaptStrategy}
*/
AutoSizeConfig init(final Application application, boolean isBaseOnWidth, AutoAdaptStrategy strategy) {
Preconditions.checkArgument(mInitDensity == -1, "AutoSizeConfig#init() can only be called once");
没有合适的资源?快使用搜索试试~ 我知道了~
基于Android无障碍服务实现的自动连点器
共76个文件
java:46个
xml:17个
gradle:4个
0 下载量 135 浏览量
2024-05-10
08:25:03
上传
评论
收藏 484KB ZIP 举报
温馨提示
基于Android无障碍服务实现的自动连点器,可以自由设置坐标和点击速度,操作简单,功能稳定。
资源推荐
资源详情
资源评论
收起资源包目录
AutoTouch.zip (76个子文件)
AutoTouch
gradle.properties 1KB
gradle
wrapper
gradle-wrapper.jar 58KB
gradle-wrapper.properties 236B
app
src
main
java
com
game
autotouch
adapter
TouchPointAdapter.java 3KB
dialog
BaseServiceDialog.java 1KB
MenuDialog.java 5KB
AddPointDialog.java 3KB
permission
BelowApi23CompatImpl.java 519B
Api23CompatImpl.java 2KB
QihooCompatImpl.java 1KB
MeizuCompatImpl.java 1KB
HuaweiCompatImpl.java 2KB
RomUtils.java 4KB
FloatWinPermissionCompat.java 5KB
MiuiCompatImpl.java 4KB
TouchEventManager.java 1019B
utils
AccessibilityUtil.java 2KB
GsonUtils.java 1KB
ToastUtil.java 468B
WindowUtils.java 9KB
DensityUtil.java 490B
SpUtils.java 4KB
DialogUtils.java 240B
service
AutoTouchService.java 6KB
FloatingService.java 5KB
MainActivity.java 7KB
bean
TouchPoint.java 524B
TouchEvent.java 2KB
res
mipmap
ic_launcher.png 350KB
xml
accessibility_config.xml 432B
values
colors.xml 349B
strings.xml 505B
styles.xml 951B
layout
dialog_menu.xml 3KB
window_touch_point.xml 467B
dialog_add_point.xml 4KB
activity_main.xml 944B
layout_window.xml 265B
item_touch_point.xml 964B
drawable
button_selector.xml 276B
shape_dialog_menu_bg.xml 187B
shape_bt_home.xml 188B
shape_bg_touch.xml 281B
AndroidManifest.xml 2KB
platform.keystore 2KB
proguard-rules.pro 751B
build.gradle 2KB
gradlew.bat 2KB
build.gradle 408B
settings.gradle 57B
gradlew 5KB
autosize
src
main
java
me
common
autosize
InitProvider.java 1KB
DefaultAutoAdaptStrategy.java 3KB
AutoSizeCompat.java 14KB
WrapperAutoAdaptStrategy.java 1KB
AutoAdaptStrategy.java 874B
FragmentLifecycleCallbacksImpl.java 1KB
onAdaptListener.java 852B
unit
UnitsManager.java 8KB
Subunits.java 791B
utils
ScreenUtils.java 3KB
LogUtils.java 777B
AutoSizeUtils.java 2KB
Preconditions.java 5KB
AutoSizeConfig.java 22KB
internal
CancelAdapt.java 496B
CustomAdapt.java 1KB
DisplayMetricsInfo.java 4KB
ActivityLifecycleCallbacksImpl.java 3KB
AutoSize.java 16KB
external
ExternalAdaptInfo.java 3KB
ExternalAdaptManager.java 6KB
res
values
strings.xml 71B
AndroidManifest.xml 383B
proguard-rules.pro 837B
build.gradle 641B
共 76 条
- 1
资源评论
哈哈,柳暗花明
- 粉丝: 3w+
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功