先安排几张APP图:
APP Version 1.0.1所实现的功能:
本项目我是第一此使用Retrofit,之前一直在使用okhttp,当然这也是比较好的工具,就我本次项目体验而言,Retrofit提供的注解对我们提升开发效率帮助很大,这个很类似与后台的SpringBoot,比如我们在RequestParam时,我们需要一个一个的构造参数,但是retrofit可以使用**@QueryMap**,如果只是单个参数,可以使用**@Query**。如果时传输路径变量则使用**@Path**,还有**@GET**、@POST等注解。
public interface API {
@POST(Constant.LOGIN_API)
Call<BackResultData<UserEntity>> submitLoginData(@Body LoginUserEntity loginUserEntity);
@POST(Constant.REGISTER_API)
Call<BackResultData> submitRegisterData(@Body RegisterUserEntity registerUserEntity);
@GET(Constant.COVER_API)
Call<BackResultData<List<CoverEntity>>> getImageUrl();
@POST(Constant.QUERY_API)
Call<BackResultData<List<QueryResultEntity>>> submitQueryData(@Body PostQueryEntity postQueryEntity);
@GET(Constant.RECORD_API)
Call<BackResultData<List<Record>>> getRecords(@Path("uid") long id);
@POST(Constant.SIGN_OUT)
Call<BackResultData> subSignOutId(@Path( "uid" ) long id);
}
最令我开心的事情是我完成了屏幕适配:
public static float sNoncompatDensity;
public static float sNoncompatScaledDensity;
public static void setCustomDensity(Activity activity, final Application application){
final DisplayMetrics appDisplayMetrics = application.getResources().getDisplayMetrics();
if (sNoncompatDensity == 0){
sNoncompatDensity = appDisplayMetrics.density;
sNoncompatScaledDensity = appDisplayMetrics.scaledDensity;
application.registerComponentCallbacks( new ComponentCallbacks() {
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
if (newConfig.fontScale > 0) {
sNoncompatScaledDensity = application.getResources().getDisplayMetrics().scaledDensity;
}
}
@Override
public void onLowMemory() {
}
} );
}
final float targetDensity = (float) appDisplayMetrics.widthPixels / 360;
System.out.println(appDisplayMetrics.widthPixels);
System.out.println(targetDensity);
final float targetScaledDensity = targetDensity * (sNoncompatScaledDensity / sNoncompatDensity);
final int targetDensityDpi = (int) (160 * targetDensity);
appDisplayMetrics.density = targetDensity;
appDisplayMetrics.densityDpi = targetDensityDpi;
appDisplayMetrics.scaledDensity = targetScaledDensity;
final DisplayMetrics activityDisplayMetrics = activity.getResources().getDisplayMetrics();
activityDisplayMetrics.density = targetDensity;
activityDisplayMetrics.scaledDensity = targetScaledDensity;
activityDisplayMetrics.densityDpi = targetDensityDpi;
}
在Activity的onCreate方法中调用调用即可
原文章 final float targetDensity = (float) appDisplayMetrics.widthPixels / 360,这里的appDisplayMetrics.widthPixels并没有强转为float类型,实际上这里的强转是必须要的。
同样是基于字节跳动的屏幕适配原理,但是作者在此基础上做了很好的优化,而且使用教程也是一看就懂。我的项目做使用了此框架,原始的字节跳动屏幕适配方案我也尝试过,效果上差别是不大的(未牵扯到限定某页面不使用屏幕适配的情况),前者使用需要在每个Activity中进行调用适配方法,没有后者使用方便,而且后者也对Fragment做很很好的处理,并且对老项目也提供的使用方法。
implementation 'me.jessyan:autosize:1.2.0'
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。