-
先安排几张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 @POST(Constant.SIGN_OUT) Call<BackResultData> subSignOutId(@Path( "uid" ) long id); }
-
- 本项目是我自己更加熟练的掌握了View之间的各种形式的传递数据
- 对Activity四种启动模式有比较深入理解
- 如何在Activity异常退出,重新进入时还原之前界面数据信息
- 了解了Serializable、Parcelable,实现对象序列化比较两者的优缺点,在Intent在两活动之间传输数据和SpringBoot Entity中都使用了对象序列化
- TabLayout与ViewPager联合使用,Toolbar与TabLayout联合使用,避免了再单独定义item_top子布局
- 沉浸式界面运用(启动界面和引导页面),注意修改状态栏字体颜色修改(默认白色)
-
最令我开心的事情是我完成了屏幕适配:
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'
-
Notifications
You must be signed in to change notification settings - Fork 0
HpBoss/Dcct-Android
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
About
【Android端药物互作用检测平台】使用了Retrofit+RxJava、Glide、AutoSize、SweetAlert、 LoadingDialog、Material、ViewBinding框架。【Kotlin版】
Topics
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published