【安卓学习之第三方库】 AndroidAutoSiz学习:DialogFragment的适配
█ 相关文章:
-
● 【安卓学习之第三方库】BasePopup(PopupWindow)进行二次封装
● 【安卓学习之第三方库】 AndroidAutoSiz学习:DialogFragment的适配
█ 读前说明:
-
● 本文通过学习别人写demo,学习一些课件,参考一些博客,’学习相关知识,如果涉及侵权请告知
● 本文只简单罗列相关的代码实现过程
● 涉及到的逻辑以及说明也只是简单介绍,主要当做笔记,了解过程而已
● demo下载传送门
█ AndroidAutoSize和DialogFragment的适配
● 在android5.2上的效果图(图1图3的高度没有全屏,图2高度为全屏):
● 在android9.0上的效果图(图2为修改前,图3图4为修改后的两种方法):
● 博客和下载信息:(建议使用360浏览器,因为我使用谷歌浏览器,图片加载不了)
GitHub地址: https://github.com/JessYanCoding/AndroidAutoSize
GitHub中文README:https://github.com/JessYanCoding/AndroidAutoSize/blob/master/README-zh.md
作者博客:https://www.jianshu.com/p/4aa23d69d481
常见问题汇总:https://github.com/JessYanCoding/AndroidAutoSize/issues/13
● 最新更新记录:
2019年11月8日 更新 BaseApplication.java
█ 我的问题:
● 在OPPO A37m上(android 5.1)上显示正常。在雷电模拟器上(android 5.1.1)上显示正常
● 在红米note7 pro上(android 9)上显示不全
█ 解决方法:
● 方法1:修改主题和布局:
代码:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style.AppThemeOK1);//适配不同屏幕大小
}
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#cc000000"
android:gravity="right"
android:orientation="vertical">
<LinearLayout
android:layout_width="1080dp"
android:layout_height="match_parent"
android:background="#f0f2f5"
android:orientation="vertical">
●●●●●●界面内容●●●●●●
</LinearLayout>
</LinearLayout>
● 方法2:修改Dialog的尺寸大小并控制靠右显示:
代码:
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = Gravity.RIGHT;
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
window.setLayout(dm.widthPixels * 1080 / 1440, ViewGroup.LayoutParams.MATCH_PARENT);
window.setAttributes(params);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"-----match_parent或者1080dp效果一样
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="1080dp"
android:layout_height="match_parent"
android:background="#f0f2f5"
android:orientation="vertical">
●●●●●●界面内容●●●●●●
</LinearLayout>
</LinearLayout>
● 方法2的补充:发现对话框高度即使设置为MATCH_PARENT,但是还是高度没有全屏,那么久可以设置主题来修改:(提交的代码里面,这句目前是屏蔽掉,测试时可以直接开启即可)
代码:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style.AppThemeOK2);//适配不同屏幕大小
}
█ 总结:
-
● 本demo的知识点:
1.AndroidAutoSize 的使用(今日头条屏幕适配方案);
2.DialogFragment 的使用;
3.DialogFragment 的适配(在1440*900的宽度上面显示1080*900的对话框,并适配不同屏幕);
4.在android5.1上面都是正常的,在android9.0上面会出现兼容问题(显示不全);
本代码为java版本,带有V7版和androidx版,带有apk,带有截图;
● 如何根据设计图创建预览?(以适配 1080 x 1920px 为例)
那么如果要创建一个 1280 x 700px,就是:
● 显示效果(可以全部展示起来,但是设置的屏幕还是偏大了):
● 完整代码下载:
https://download.csdn.net/download/ljb568838953/12092196
█ 补充(2020年01月14日):
● 在适配过程中,遇到如下问题(前面两行可以对齐,后面几行没有对齐):
● 问题:代码实现是AppCompatActivity、Fragment和RecyclerView实现的,在初始化时RecyclerView显示正常,当notifyDataSetChanged()后,新增的行就不对齐,整体向右便宜。
● 原因:AppCompatActivity和Fragment的总宽度设置不同导致的,AppCompatActivity的总宽度为1440dp,Fragment的总宽度为1280dp,所以使得notifyDataSetChanged()后,新增的行间距变大,字体变粗。
█ 相关资料:
● 1.今日头条屏幕适配方案终极版,JessYanCoding/AndroidAutoSize
● 2.Android屏幕适配实例教程「今日头条,AutoSize」AndroidAutoSize
● 3.AndroidAutoSize-中文说明
● 4.今日头条屏幕适配方案终极版正式发布!
● 5.JessYan: 今日头条屏幕适配方案常见问题汇总,提问前必看!
● 6.Android Res下的values-sw360dp,values-sw480dp,values-swxxxdp到底是什么东西
● 7.主流机型Device Metrics
● 8.2018-08-20 骚年你的屏幕适配方式该升级了!-今日头条适配方案-JessYan
● 9.2018-12-18 Android 屏幕适配终结者(如何根据设计图创建预览?)
● 10. 2018-08-15 Android 目前稳定高效的UI适配方案
● 11. 2017-06-20 Fragment 与DialogFragment 相互之间传递数据
转载请注明出处:
https://blog.csdn.net/ljb568838953/article/details/103906449