博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
讨论:今日头条适配方案使用中出现的问题
阅读量:6424 次
发布时间:2019-06-23

本文共 2862 字,大约阅读时间需要 9 分钟。

这里主要是想和大家讨论下使用中出现的一些问题和解决方法 有更好的方法或者有什么不对的欢迎批评

  1. 启动页图片问题

    • 给启动的activity指定一个背景,不设置布局让程序快速进入启动页
    复制代码
    • 问题:activity应用还在初始化,onCreate还没有执行,默认显示了背景图,此时的背景图上的logo是没有使用适配方案的效果,当onCrate被执行后,屏幕的密度发生变化,logo会放大缩小。
    • 解决方法:
      1. 不让启动页适配
      2. 启动页主题设置<item name="android:windowDisablePreview">true</item>,让app加载完后进入启动页
  2. 横竖切换适配无效

    • 当横竖屏切换且我们在配置文件中设置了android:configChanges=,在我们切换了屏幕方向,或者其它操作时会调用:
    @Overridepublic void onConfigurationChanged(Configuration newConfig) {        super.onConfigurationChanged(newConfig);        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {            Logger.e("当前屏幕为横屏");        } else {            Logger.e("当前屏幕为竖屏");            //退出全屏后重新适配屏幕            ScreenFitUtils.setCustomDensity(this, getApplication());        }    }复制代码

    我们在看下super调用的父类方法做了什么

    @Overridepublic void onConfigurationChanged(Configuration newConfig) {        super.onConfigurationChanged(newConfig);        getDelegate().onConfigurationChanged(newConfig);        if (mResources != null) {            // The real (and thus managed) resources object was already updated            // by ResourcesManager, so pull the current metrics from there.            final DisplayMetrics newMetrics = super.getResources().getDisplayMetrics();            mResources.updateConfiguration(newConfig, newMetrics);        }    }复制代码

    可以看到被重置了,所以我们在前面的适配又变成了原始的数据,如果这时候你刷新界面,界面会变成没有适配的效果。

    • 解决办法:
      1. 在回调中再调用一次适配方法
  3. 第三方库问题

    • 当我使用节操播放器退出全屏的时候,再打开其他界面界面变得非常奇怪
    • 原因
    if (sRoncompatDennsity == 0) {	sRoncompatDennsity = appDisplayMetrics.density;	sRoncompatScaledDensity = appDisplayMetrics.scaledDensity;	application.registerComponentCallbacks(new ComponentCallbacks() {		@Override		public void onConfigurationChanged(Configuration newConfig) {			if (newConfig != null && newConfig.fontScale > 0) {				sRoncompatScaledDensity = application.getResources().getDisplayMetrics().scaledDensity;                    }                }        @Override		public void onLowMemory() {}	});}复制代码

    当节操播放器横屏播放退出时系统调用了onConfigurationChanged(我也不知道为啥)方法,而且scaledDensity发生了变化(我的设备是pixel默认2.6,适配后3.0,退出全屏变成了4.0)。最糟糕的是只要sRoncompatDennsity不等于0就不会去获取系统默认的density,scaledDensity导致字体变得超级大

    • 解决办法:
      • 不设置registerComponentCallbacks监听这样系统修改文字不能实时更新
      • 注释掉if (sRoncompatDennsity == 0)每次都去获取系统的密度参数
  4. AlertDialog等弹窗超出屏幕

    因为dialog用的是activitycontext,所以被动的被适配了,密度发生了变化。

    • 解决办法:
      • 修改style
        复制代码
      • 手动修改宽度,适合那些无法设置宽度属性的弹窗
        Window window = dialog.getWindow(); WindowManager.LayoutParams layoutParams;if (window != null) {    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);    window.getDecorView().setPadding(0, 0, 0, 0);    layoutParams = window.getAttributes();    layoutParams.width = RuleUtils.getScreenWidth(context);    window.setAttributes(layoutParams);    window.setGravity(Gravity.CENTER);    window.setWindowAnimations(R.style.PopScaleAnimStyle);}复制代码

转载地址:http://glvra.baihongyu.com/

你可能感兴趣的文章
Leetcode 142. Linked List Cycle IIJAVA语言
查看>>
shell--4、Shell 数组
查看>>
cPanel附加域名出现Error from park wrapper: 使用带以下 IP 的命名服务器:
查看>>
Lua基础之coroutine(协程)
查看>>
最优化问题中黄金分割法的代码
查看>>
在JS中使用Ajax
查看>>
将一个十六进制数的字符串参数转换成整数返回
查看>>
在Unbuntu 上安装Phalcon
查看>>
Python正则表达式指南
查看>>
常用的加密算法--摘要认证和签名认证的实现
查看>>
webplayer 设置加载图标和屏蔽右键
查看>>
开源数据库:何为NoSQL生态系统?
查看>>
PHP中利用Ffmpeg获得flv视频缩略图和播放时间
查看>>
percona-toolkit工具包的安装和使用
查看>>
corosync配置与详解
查看>>
Fail to get tape drive(tsm) inventory
查看>>
openssl校验SSL证书public key是否配对
查看>>
十八、AR数据库的关联查询relations之单条数据查询
查看>>
管理历程篇---学会四心
查看>>
RCNA复习知识点
查看>>