Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JessYan: 意见收集 😘,请进 QQ 群: 455850365 #118

Open
JessYanCoding opened this issue Aug 22, 2018 · 83 comments
Open

JessYan: 意见收集 😘,请进 QQ 群: 455850365 #118

JessYanCoding opened this issue Aug 22, 2018 · 83 comments
Labels
enhancement New feature or request

Comments

@JessYanCoding
Copy link
Owner

  • 有什么问题可以直接进 QQ-Group 咨询

如果您对 AndroidAutoSize 和 JessYan 有什么好的建议,都可以在下面留言以及讨论

@q454216935
Copy link

设计标注的px,我们要转换成dp,是吧

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Aug 30, 2018

@q454216935 AndroidAutoSize 在版本 v0.9.1 之后,新增了副单位,区别与传统的今日头条方案,可以使用 pt、in、mm 这三种冷门单位在 layout 文件中布局,这样不光可以直接填写设计图中的 px 尺寸,不需要再将 px 转化为 dp 外,还可以规避修改 DisplayMetrics#density 所造成的对于其他使用 dp 布局的系统控件或三方库控件的不良影响

@q454216935
Copy link

那我们在AndroidManifest里面是写转换过的dp尺寸还是px呢

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Aug 30, 2018

@q454216935 AndroidManifest 直接填 px 尺寸,在布局中也写 px 的尺寸,但是单位用副单位,详情看 demo-subunits ,注释写的很详细

@q454216935
Copy link

谢谢,pt的话布局预览的时候看不到全部的,请问你是怎么预览的。0.0

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Aug 30, 2018

@q454216935 按照 README 中的步骤,创建对应单位的模拟设备,布局中用什么单位就创建什么单位的模拟设备,不可能预览不了,所有单位的模拟设备我测试了无数遍,全部将 Preview 放大到 1000%,测得创建的所有单位的模拟设备预览时与设计图的误差都不超过 0.5 px

@kevinStrange
Copy link

设计标注为1080px * 1920px ,然后假设有一个高度为100px,宽度为200px,这个宽高的px怎么计算成dp呢

@yutouxiansheng
Copy link

这个和Android MD控件兼容吗?之前用的弘扬的autolayout和MD控件不兼容,布局里单位写的px

@JcmeLs
Copy link

JcmeLs commented Sep 6, 2018

哈哈开个脑洞,如果刘海屏,水滴屏能直接适配就牛逼了~感谢Jess神开发如此低成本的适配框架

@JessYanCoding
Copy link
Owner Author

@kevinStrange 直接用上面留言提到的副单位,直接可以按照设计图的尺寸填写

@JessYanCoding
Copy link
Owner Author

@yutouxiansheng 和控件没有关系,只要将框架引入项目,所有控件都可以适配

@yutouxiansheng
Copy link

可以写dp吗?

@Leu-Z
Copy link

Leu-Z commented Sep 10, 2018

你好,我用你的方法创建了副单位布局预览的设备,但是使用中发现一个问题,ui给的图标用wrap_content的话,会显示得非常小,很不方便。是不是用这个方法的话必须要硬编码图标的长和宽?

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Sep 11, 2018

不是,这个只是预览设备显示效果会变小,图片运行到实际设备不一定会小,为了让副单位布局的页面预览效果能够和设计图的显示效果一模一样,所以使用算法求出的预览设备的屏幕尺寸都是被放大了很多倍的,wrap_content 在放大很多倍的屏幕上显示效果变小在所难免,但并不影响实际的运行效果,因为实际设备的屏幕尺寸是正常

@Leu-Z
Copy link

Leu-Z commented Sep 11, 2018

@JessYanCoding 嗯,在小的设备上,的确没什么违和感。但是在一些大的设备上,比如平板之类的,图标用wrap_content,其他控件都按照这种适配方案同比例放大了,就这个图标还是原来的大小,就很违和了。

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Sep 11, 2018

@Leu-Z wrap_content 是按图片的实际大小来显示,在小屏显示正常,在大屏显示效果就很小不是很正常吗,因为图片实际大小是没变的,你要想这个图片也能和其他控件一样同比例放大,就给它标注尺寸,使用 wrap_content 框架是不会帮你同比例缩放的

@Leu-Z
Copy link

Leu-Z commented Sep 11, 2018

嗯,所以我觉得为了更好的适配,图片还是标注尺寸为好(虽然很麻烦,可能还会出现放大模糊的问题),不然在某些设备上太违和了。

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Sep 11, 2018

模糊是因为你没有在对应 drawable-xxx 文件夹中放入对应分辨率的图片,你放的图片只适配了小屏幕手机,你却强制要让这个低分辨率的图片放大 N 倍,去适配平板,能不模糊吗,说到底是你自己图片分辨率就没给够,如果你让设计师给你多切几个不同分辨率的图片,来适应不同分辨率的屏幕,你直接用 wrap_content 也可以适配,这是你自己需要做的了

@Leu-Z
Copy link

Leu-Z commented Sep 11, 2018

谢谢大神指教!

@kevinStrange
Copy link

image
大神你好,我没看懂你那条公式,请问是怎么计算的呢,1920^2是什么意思呢

@JessYanCoding
Copy link
Owner Author

@kevinStrange ... 兄弟,数学该去补补了,这些都是数学符号,^2 是平方的意思,sqrt 是开根的意思

@JessYanCoding
Copy link
Owner Author

@fazhongxu 描述的不清晰,没听懂你表达的内容,最好图文并茂详细描述

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Sep 20, 2018

你这样描述后我就清楚了,也就马上定位问题了,因为这个框架的自动运行机制是在每个 Activity 的 onCreate 时主动适配当前页面,但是你没打开 App,Activity 的 onCreate 就不会调用,所以如果在你不打开 App 的情况下,就需要在输入法弹出前主动调用 AutoSize#autoConvertDensityOfGlobal 手动触发屏幕适配,

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Sep 21, 2018

@fazhongxu
https://github.com/JessYanCoding/AndroidAutoSize/blob/master/autosize/src/main/java/me/jessyan/autosize/AutoSize.java 这个类不就是工具类吗,里面全是静态方法,你这个方法,在这个类里面也是有的,甚至还有很多可以扩展适配参数的方法,我上面的回答就让你手动调用这个 AutoSize#autoConvertDensityOfGlobal 方法,和你这个差不多,你没看吗,你重新叙述一遍我上面给你的解决方案,还建议我让我加一个在框架创建之初就有的类,让我很懵逼......

@JessYanCoding
Copy link
Owner Author

@fazhongxu 行,空了加上

@liyujiang-gzu
Copy link

@q454216935 AndroidManifest 直接填 px 尺寸,在布局中也写 px 的尺寸,但是单位用副单位,详情看 demo-subunits ,注释写的很详细

那为什么布局里不直接填写px,而要填写mm、pt或in?

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Sep 27, 2018

@liyujiang-gzu 这个我不想回答了,是这个方案的基础,去看我之前写的今日头条方案的文章,里面都有介绍

@Jeffery336699
Copy link

大佬,副单位要如何设置,兼容适配之前代码写的dp?

@JessYanCoding
Copy link
Owner Author

@Jeffery336699demo-subunits 副单位的所有用法在里面都有展示,并且有几倍于代码的超详细注释

@18243013969
Copy link

switch (AutoSizeConfig.getInstance().getUnitsManager().getSupportSubunits()) {
case NONE:
break;
case PT:
displayMetrics.xdpi = xdpi * 72f;
break;
case IN:
displayMetrics.xdpi = xdpi;
break;
case MM:
displayMetrics.xdpi = xdpi * 25.4f;
break;
default:
break;
}

调用cancelAdapt的时候getSupportSubunits里面的值并如果不是IN的话,初始化的xdpi 也会乘以一个倍数,这个就不是原来的值了吧,是不是这样的?

@JessYanCoding JessYanCoding added the enhancement New feature or request label Jan 7, 2019
@JessYanCoding
Copy link
Owner Author

@liaohuyu #116

@manondidi
Copy link

@Leu-Z wrap_content 是按图片的实际大小来显示,在小屏显示正常,在大屏显示效果就很小不是很正常吗,因为图片实际大小是没变的,你要想这个图片也能和其他控件一样同比例放大,就给它标注尺寸,使用 wrap_content 框架是不会帮你同比例缩放的

您说的是 这个框架 wrap_content 是不会帮忙做适配的, 只有写死固定的值 比如 100dp 框架才会做适配吗
比如说我的 imageview textView 如果是wrap_content 宽高是没用的
如果是textview 只帮我们处理 字体大小的放大缩小适配 从而达到 textview的放大缩小适配
而imageview是无法处理的

@chenkezhao
Copy link

chenkezhao commented Mar 22, 2019

使用bugly的热更新代码后,AndroidAutoSize 失效,布局比例无法转换。能支持bugly热更新最好了!
使用万能那个
@OverRide
public Resources getResources() {
//需要升级到 v1.1.2 及以上版本才能使用 AutoSizeCompat
AutoSizeCompat.autoConvertDensityOfGlobal((super.getResources());//如果没有自定义需求用这个方法
AutoSizeCompat.autoConvertDensity((super.getResources(), 667, false);//如果有自定义需求就用这个方法
return super.getResources();
}
都没效果

@JessYanCoding
Copy link
Owner Author

@chenkezhao 可能是多进程问题,#13 (comment)

@Maxitk
Copy link

Maxitk commented Apr 16, 2019

大神,我重新提问一下,我在第一个页面(SplashActivity)初始化了一些东西,接着跳入MainActivity,当我启动的时候,马上熄屏,接着再解锁,图标及其他layout全部变形了(包括非自定义控件),我在mainactivity和splashactivity都有重写getResources的方法

@tydqcjj
Copy link

tydqcjj commented Apr 19, 2019

如何对高进行适配。这是我的配置
<meta-data android:name="design_width_in_dp" android:value="640" /> <meta-data android:name="design_height_in_dp" android:value="360" />
我设置一个控件的
android:layout_width="640dp" android:layout_height="360dp"
这个时候控件的宽占满整个屏幕,但是高却没有占满屏幕。
如果我想让设计图完全按比例映射到屏幕上,应该怎么做?

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Apr 22, 2019

@tydqcjj 做不到,不是所有设备的屏幕高宽比都和你的设计图一样,除非你想让你的 View 变形,为什么说 AndroidAutoLayout 的设计有问题?

@tydqcjj
Copy link

tydqcjj commented Apr 23, 2019

@tydqcjj 做不到,不是所有设备的屏幕高宽比都和你的设计图一样,除非你想让你的 View 变形,为什么说 AndroidAutoLayout 的设计有问题?

能否做到自由切换适配方案。比如说有些activity需要适配宽,有些activity需要适配高,有些需要宽和高同时适配哪怕view变形也行。然后通过一个接口去自定义。

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Apr 23, 2019

@tydqcjj 单独适配宽和单独适配高是本框架的基础功能,而且每个页面都可以灵活切换,自己看看文档和 Demo,里面有用法,想同时适配宽和高,建议使用 AndroidAutoLayout,本框架不会支持这种会导致 View 变形的需求。

@liaohuyu
Copy link

@JessYanCoding 适配dialog 是需要每次show之前都调用AutoSize#autoConvertDensity() ?
在fragment onResume也调用下这个才能完全适配么? 我在getResources已经调用了AutoSizeCompat.autoConvertDensityOfGlobal((super.getResources()));。发现dialog有时候在回调页面的时候会适配失效。我也认真看了13的总结。只是想再确认一下,是否这样做就能完全适配dialog和fragment了

@liaohuyu
Copy link

@JessYanCoding 还有个问题就是在getResources() 这个方法被调用太多次了,特别是有列表的页面,不停被调用 这样会不会影响性能?

@JessYanCoding
Copy link
Owner Author

@liaohuyu 最终解决方案就是利用 getResources() 会被调用多次的原理,以增加 density 的稳定性,并且 v1.1.2 已经优化了适配时的性能,所以你考虑的问题已经最大限度的优化了,我都是用上千次的调用测试的,也就几十微秒。

@FOnlyJack
Copy link

这句话如果没有特殊要求 AutoSizeConfig.getInstance()
            .setBaseOnWidth(true)  用设置吗???

@JessYanCoding
Copy link
Owner Author

@FOnlyJack 不用,默认为 true

@656025633
Copy link

您好 ,使用您的适配框架过程中 在使用dialog或者popwindow都会出现偏移的问题,dialog一直靠右对齐,请问有解决方案么?

@zb666

This comment has been minimized.

@JessYanCoding
Copy link
Owner Author

@656025633 翻之前的 issues

@MrFuShuai
Copy link

使用 AutoSize做屏幕适配后, Activity一段时间后会执行自动 stop(方法),查看log 显示 AndroidAutoSize: initScaledDensity = 3.0 on ConfigurationChanged,导致程序退出,请问这个问题是否遇到过,是不是我的某项配置有问题? 谢谢!

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Aug 15, 2019

@MrFuShuai 框架自动执行 stop 方法,是不可能的,框架自身就没调用过 stop 方法,这个方法是提供给开发者使用的,而且还必须传入当前 Activity,程序退出是什么意思?是奔溃?奔溃的 Exception 是什么,原因是什么?这些不提供没法给出答案

@TianGuisen
Copy link

TianGuisen commented Jan 10, 2020

预览那里没法选择自创的模拟器啊。windows,android studio3.5,记得以前版本可以来着,咋整

@CoolChimpanzee
Copy link

如果以宽度为基准,那么高度如何做到跟设计图一样呢,我在小米5x手机上获得屏幕宽高是是标准的360x640dp ,然后我设置以宽在布局中的空间高度600dp还是填充漫屏幕的,求指教

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Jul 23, 2020

@CoolChimpanzee 答案是,当以宽为基准是,没法做到高度纵向拉伸填充满屏幕并保持和设计图一样,当以高度为基准时,则宽度也没法做到,如果可以实现以上需求的话,那区不区分区分高宽都无所谓了,何必还多增加一个条件变量,让你选择是以宽为基准还是以高为基准呢。https://mp.weixin.qq.com/s/SDHL26XgIjjlK-RLd_SSCw

@quzhongrensan
Copy link

我测试在小米mix2上,以高度为基准也不能占满屏幕高度,

@yyc2413
Copy link

yyc2413 commented Apr 28, 2021

setPrivateFontScale使用后如何刷新呢,目前需要重启app才能刷新字体大小

@loyilin
Copy link

loyilin commented May 7, 2021

华为平板启动activity闪退

java.lang.IllegalArgumentException: lightY must be finite, given=NaN
at android.graphics.HardwareRenderer.validateFinite(HardwareRenderer.java:855)
at android.graphics.HardwareRenderer.setLightSourceGeometry(HardwareRenderer.java:227)
at android.view.ThreadedRenderer.setLightCenter(ThreadedRenderer.java:510)
at android.view.ThreadedRenderer.setup(ThreadedRenderer.java:496)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2748)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1879)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8170)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1057)
at android.view.Choreographer.doCallbacks(Choreographer.java:875)
at android.view.Choreographer.doFrame(Choreographer.java:776)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1042)
at android.os.Handler.handleCallback(Handler.java:900)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8349)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)

@loyilin
Copy link

loyilin commented May 7, 2021

找不到资源id闪退

Caused by: android.content.res.Resources$NotFoundException: Drawable com.amigaga.gagabot:drawable/edit_text_background with resource ID #0x7f0600e7
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/edit_text_background.xml from drawable resource ID #0x7f0600e7

@loyilin
Copy link

loyilin commented May 7, 2021

注释掉使用的代码,其他ID又报错,没法用

@JessYanCoding
Copy link
Owner Author

JessYanCoding commented Jun 25, 2021

@yyc2413 重建所有Activity,或调用一次 setDensity 后重绘所有用到字体的 View

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests