Comments (83)
@q454216935 按照 README 中的步骤,创建对应单位的模拟设备,布局中用什么单位就创建什么单位的模拟设备,不可能预览不了,所有单位的模拟设备我测试了无数遍,全部将 Preview 放大到 1000%,测得创建的所有单位的模拟设备预览时与设计图的误差都不超过 0.5 px
from androidautosize.
模糊是因为你没有在对应 drawable-xxx 文件夹中放入对应分辨率的图片,你放的图片只适配了小屏幕手机,你却强制要让这个低分辨率的图片放大 N 倍,去适配平板,能不模糊吗,说到底是你自己图片分辨率就没给够,如果你让设计师给你多切几个不同分辨率的图片,来适应不同分辨率的屏幕,你直接用 wrap_content 也可以适配,这是你自己需要做的了
from androidautosize.
@q454216935 AndroidManifest 直接填 px 尺寸,在布局中也写 px 的尺寸,但是单位用副单位,详情看 demo-subunits ,注释写的很详细
from androidautosize.
谢谢,pt的话布局预览的时候看不到全部的,请问你是怎么预览的。0.0
from androidautosize.
@fazhongxu
https://github.com/JessYanCoding/AndroidAutoSize/blob/master/autosize/src/main/java/me/jessyan/autosize/AutoSize.java 这个类不就是工具类吗,里面全是静态方法,你这个方法,在这个类里面也是有的,甚至还有很多可以扩展适配参数的方法,我上面的回答就让你手动调用这个 AutoSize#autoConvertDensityOfGlobal 方法,和你这个差不多,你没看吗,你重新叙述一遍我上面给你的解决方案,还建议我让我加一个在框架创建之初就有的类,让我很懵逼......
from androidautosize.
预览那里没法选择自创的模拟器啊。windows,android studio3.5,记得以前版本可以来着,咋整
from androidautosize.
设计标注的px,我们要转换成dp,是吧
from androidautosize.
@q454216935 AndroidAutoSize 在版本 v0.9.1 之后,新增了副单位,区别与传统的今日头条方案,可以使用 pt、in、mm 这三种冷门单位在 layout 文件中布局,这样不光可以直接填写设计图中的 px 尺寸,不需要再将 px 转化为 dp 外,还可以规避修改 DisplayMetrics#density 所造成的对于其他使用 dp 布局的系统控件或三方库控件的不良影响
from androidautosize.
那我们在AndroidManifest里面是写转换过的dp尺寸还是px呢
from androidautosize.
设计标注为1080px * 1920px ,然后假设有一个高度为100px,宽度为200px,这个宽高的px怎么计算成dp呢
from androidautosize.
这个和Android MD控件兼容吗?之前用的弘扬的autolayout和MD控件不兼容,布局里单位写的px
from androidautosize.
哈哈开个脑洞,如果刘海屏,水滴屏能直接适配就牛逼了~感谢Jess神开发如此低成本的适配框架
from androidautosize.
@kevinStrange 直接用上面留言提到的副单位,直接可以按照设计图的尺寸填写
from androidautosize.
@yutouxiansheng 和控件没有关系,只要将框架引入项目,所有控件都可以适配
from androidautosize.
可以写dp吗?
from androidautosize.
你好,我用你的方法创建了副单位布局预览的设备,但是使用中发现一个问题,ui给的图标用wrap_content的话,会显示得非常小,很不方便。是不是用这个方法的话必须要硬编码图标的长和宽?
from androidautosize.
不是,这个只是预览设备显示效果会变小,图片运行到实际设备不一定会小,为了让副单位布局的页面预览效果能够和设计图的显示效果一模一样,所以使用算法求出的预览设备的屏幕尺寸都是被放大了很多倍的,wrap_content 在放大很多倍的屏幕上显示效果变小在所难免,但并不影响实际的运行效果,因为实际设备的屏幕尺寸是正常
from androidautosize.
@JessYanCoding 嗯,在小的设备上,的确没什么违和感。但是在一些大的设备上,比如平板之类的,图标用wrap_content,其他控件都按照这种适配方案同比例放大了,就这个图标还是原来的大小,就很违和了。
from androidautosize.
@Leu-Z wrap_content 是按图片的实际大小来显示,在小屏显示正常,在大屏显示效果就很小不是很正常吗,因为图片实际大小是没变的,你要想这个图片也能和其他控件一样同比例放大,就给它标注尺寸,使用 wrap_content 框架是不会帮你同比例缩放的
from androidautosize.
嗯,所以我觉得为了更好的适配,图片还是标注尺寸为好(虽然很麻烦,可能还会出现放大模糊的问题),不然在某些设备上太违和了。
from androidautosize.
谢谢大神指教!
from androidautosize.
大神你好,我没看懂你那条公式,请问是怎么计算的呢,1920^2是什么意思呢
from androidautosize.
@kevinStrange ... 兄弟,数学该去补补了,这些都是数学符号,^2 是平方的意思,sqrt 是开根的意思
from androidautosize.
@fazhongxu 描述的不清晰,没听懂你表达的内容,最好图文并茂详细描述
from androidautosize.
你这样描述后我就清楚了,也就马上定位问题了,因为这个框架的自动运行机制是在每个 Activity 的 onCreate 时主动适配当前页面,但是你没打开 App,Activity 的 onCreate 就不会调用,所以如果在你不打开 App 的情况下,就需要在输入法弹出前主动调用 AutoSize#autoConvertDensityOfGlobal 手动触发屏幕适配,
from androidautosize.
@fazhongxu 行,空了加上
from androidautosize.
@q454216935 AndroidManifest 直接填 px 尺寸,在布局中也写 px 的尺寸,但是单位用副单位,详情看 demo-subunits ,注释写的很详细
那为什么布局里不直接填写px,而要填写mm、pt或in?
from androidautosize.
@liyujiang-gzu 这个我不想回答了,是这个方案的基础,去看我之前写的今日头条方案的文章,里面都有介绍
from androidautosize.
大佬,副单位要如何设置,兼容适配之前代码写的dp?
from androidautosize.
@Jeffery336699 看 demo-subunits 副单位的所有用法在里面都有展示,并且有几倍于代码的超详细注释
from androidautosize.
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 也会乘以一个倍数,这个就不是原来的值了吧,是不是这样的?
from androidautosize.
@18243013969 是你说的这个情况,但取消适配这个功能是专门给使用 dp、sp 布局的时候使用的,如果使用副单位进行布局的话,根本不存在取消适配这一说,因为你如果某个页面不需要适配,那就在布局中不要使用副单位进行布局就可以了
假使你确实想使用 实现 CancelAdapt 的方式取消副单位的适配,并将你指出的逻辑也修改正确的话,取消适配过后的页面,因为布局中使用的是副单位,实际预览效果也会惨不忍睹,基本不能看,因为 in、mm、pt 这三个单位系统最后换算成 px,值都会非常大,假使布局中使用 2 in,也占小半个屏幕了,你布局中一来就 几十 in,直接超出了屏幕可以容纳的面积,所以如果某个页面使用副单位,并且想取消这个页面的适配,可行的办法就是将布局中的副单位都修改成 dp 或 sp
其实取消适配这个需求的由来就是因为,这个框架如果使用 dp、sp 的话,会影响三方库或者系统控件,因为他们里面也是使用 dp、sp 进行布局,如果使用副单位,取消适配这个需求基本上就不需要的,因为副单位就是为了彻底解决框架会影响三方库或系统控件的问题,但也增加了侵入性,所以框架也同时支持 dp、sp、副单位的使用,可以按自己的需求自行切换,CancelAdapt 这个功能也就保留了下来
不过还是感谢你的指出,这里你是在代码上的分析,是没有错的,我这里确实存在纰漏,既然指出了,我这里也修正了下 e6c0370
from androidautosize.
当页面中有多级列表时,动态加载列表数据,子级列表会适配不好或不能适配,请问怎样解决?
from androidautosize.
from androidautosize.
横屏应用 ,在返回home键再进入应用的时候 有些尺寸会失控,但是进入别的页面再返回进来又正常。包括页面中RecyclerView的一些item也会失控。怎么解决
from androidautosize.
@liukai2530533 #13 (comment)
from androidautosize.
谢谢,解决了
from androidautosize.
设计图是按照iPhone6(750x1334),配置里面
真机运行时只有预览图的高度的一半
from androidautosize.
@folinwu AndroidManifest 填写的 1334,布局中却是以 667 的最大高度来布局,当然只会有一半
from androidautosize.
这个是AndroidManifest做了适配之后的(720x1280)
from androidautosize.
@folinwu 我觉得可能你没明白框架的用法,你在 QQ群 (301733278) 里找到我私聊
from androidautosize.
toast跟弹出的popwindow都很小了,在popwindow的布局设置了UI给的尺寸也不行
from androidautosize.
@Zrsod07 自己翻 issues
from androidautosize.
Unable to get provider me.jessyan.autosize.InitProvider: java.lang.ClassNotFoundException: Didn't find class "me.jessyan.autosize.InitProvider"
这是什么意思?4.4
from androidautosize.
@xianhe005 某些系统抽风,声明的类名省略了包名,报找不到?我现在声明全地址咯 5a8bfa9
from androidautosize.
这里提个建议,作者有时间富余可以考虑来一个kotlin版本,这样更全面一点
from androidautosize.
@skyCracks Demo 有可能出 Kotlin 的版本,框架没这个考虑
from androidautosize.
在同一个fragment 使用WebView和RecyclerView,RecyclerView的item布局使用副单位pt,在java代码里面先执行WebView的loadUrl,再去加载RecyclerView数据,item的pt单位适配会失效。
from androidautosize.
@Hello-Kiki #5 #59 #13 (comment)
from androidautosize.
适配方案确实很好,但是接入Tinker后,整个框架就失效了,作者可以关注一下
from androidautosize.
@Hello-Kiki # 5 # 59 13 #(评论)
谢谢大佬
from androidautosize.
@BSSilence #13 (comment)
from androidautosize.
在代码里动态设置布局宽高时,是不是需要根据当前手机屏幕算出对应比例的宽高?
from androidautosize.
@xilost https://github.com/JessYanCoding/AndroidAutoSize/blob/master/autosize/src/main/java/me/jessyan/autosize/utils/AutoSizeUtils.java
from androidautosize.
@xilost 你说的 Arms 框架吗?自定义 Application 持有全局单例是可以的,但是需要多一步创建操作,GlobalConfiguration 和 AppLifecyclesImpl 是现成的,里面大部分方法都能拿到 Context,可以在里面创建静态方法
from androidautosize.
@JessYanCoding A页面没有隐藏虚拟键,B页面是全屏显示,进入后会自动隐藏虚拟键。那么A跳B后,B页面取到的是适配值要小一个虚拟键的高度。解决办法是取getRawScreenSize,但是如果我想全局都用这个就只能把代码Git下来了。有没有办法配置尺寸是选原始的屏幕尺寸呢?
from androidautosize.
from androidautosize.
@Leu-Z wrap_content 是按图片的实际大小来显示,在小屏显示正常,在大屏显示效果就很小不是很正常吗,因为图片实际大小是没变的,你要想这个图片也能和其他控件一样同比例放大,就给它标注尺寸,使用 wrap_content 框架是不会帮你同比例缩放的
您说的是 这个框架 wrap_content 是不会帮忙做适配的, 只有写死固定的值 比如 100dp 框架才会做适配吗
比如说我的 imageview textView 如果是wrap_content 宽高是没用的
如果是textview 只帮我们处理 字体大小的放大缩小适配 从而达到 textview的放大缩小适配
而imageview是无法处理的
from androidautosize.
使用bugly的热更新代码后,AndroidAutoSize 失效,布局比例无法转换。能支持bugly热更新最好了!
使用万能那个
@OverRide
public Resources getResources() {
//需要升级到 v1.1.2 及以上版本才能使用 AutoSizeCompat
AutoSizeCompat.autoConvertDensityOfGlobal((super.getResources());//如果没有自定义需求用这个方法
AutoSizeCompat.autoConvertDensity((super.getResources(), 667, false);//如果有自定义需求就用这个方法
return super.getResources();
}
都没效果
from androidautosize.
@chenkezhao 可能是多进程问题,#13 (comment)
from androidautosize.
大神,我重新提问一下,我在第一个页面(SplashActivity)初始化了一些东西,接着跳入MainActivity,当我启动的时候,马上熄屏,接着再解锁,图标及其他layout全部变形了(包括非自定义控件),我在mainactivity和splashactivity都有重写getResources的方法
from androidautosize.
如何对高进行适配。这是我的配置
<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"
这个时候控件的宽占满整个屏幕,但是高却没有占满屏幕。
如果我想让设计图完全按比例映射到屏幕上,应该怎么做?
from androidautosize.
@tydqcjj 做不到,不是所有设备的屏幕高宽比都和你的设计图一样,除非你想让你的 View 变形,为什么说 AndroidAutoLayout 的设计有问题?
from androidautosize.
@tydqcjj 做不到,不是所有设备的屏幕高宽比都和你的设计图一样,除非你想让你的 View 变形,为什么说 AndroidAutoLayout 的设计有问题?
能否做到自由切换适配方案。比如说有些activity需要适配宽,有些activity需要适配高,有些需要宽和高同时适配哪怕view变形也行。然后通过一个接口去自定义。
from androidautosize.
@tydqcjj 单独适配宽和单独适配高是本框架的基础功能,而且每个页面都可以灵活切换,自己看看文档和 Demo,里面有用法,想同时适配宽和高,建议使用 AndroidAutoLayout,本框架不会支持这种会导致 View 变形的需求。
from androidautosize.
@JessYanCoding 适配dialog 是需要每次show之前都调用AutoSize#autoConvertDensity() ?
在fragment onResume也调用下这个才能完全适配么? 我在getResources已经调用了AutoSizeCompat.autoConvertDensityOfGlobal((super.getResources()));。发现dialog有时候在回调页面的时候会适配失效。我也认真看了13的总结。只是想再确认一下,是否这样做就能完全适配dialog和fragment了
from androidautosize.
@JessYanCoding 还有个问题就是在getResources() 这个方法被调用太多次了,特别是有列表的页面,不停被调用 这样会不会影响性能?
from androidautosize.
@liaohuyu 最终解决方案就是利用 getResources() 会被调用多次的原理,以增加 density 的稳定性,并且 v1.1.2 已经优化了适配时的性能,所以你考虑的问题已经最大限度的优化了,我都是用上千次的调用测试的,也就几十微秒。
from androidautosize.
这句话如果没有特殊要求 AutoSizeConfig.getInstance()
.setBaseOnWidth(true) 用设置吗???
from androidautosize.
@FOnlyJack 不用,默认为 true
from androidautosize.
您好 ,使用您的适配框架过程中 在使用dialog或者popwindow都会出现偏移的问题,dialog一直靠右对齐,请问有解决方案么?
from androidautosize.
您好,项目中有个"App 字体大小"不随着手机系统变化而变化的功能,我参照了网上的一些方案,在BaseActivity中复写getResources方法,还原系统字体大小,但是这样一来导致了AutoSize适配无效。想请教下解决的方案
from androidautosize.
@656025633 翻之前的 issues
from androidautosize.
使用 AutoSize做屏幕适配后, Activity一段时间后会执行自动 stop(方法),查看log 显示 AndroidAutoSize: initScaledDensity = 3.0 on ConfigurationChanged,导致程序退出,请问这个问题是否遇到过,是不是我的某项配置有问题? 谢谢!
from androidautosize.
@MrFuShuai 框架自动执行 stop 方法,是不可能的,框架自身就没调用过 stop 方法,这个方法是提供给开发者使用的,而且还必须传入当前 Activity,程序退出是什么意思?是奔溃?奔溃的 Exception 是什么,原因是什么?这些不提供没法给出答案
from androidautosize.
如果以宽度为基准,那么高度如何做到跟设计图一样呢,我在小米5x手机上获得屏幕宽高是是标准的360x640dp ,然后我设置以宽在布局中的空间高度600dp还是填充漫屏幕的,求指教
from androidautosize.
@CoolChimpanzee 答案是,当以宽为基准是,没法做到高度纵向拉伸填充满屏幕并保持和设计图一样,当以高度为基准时,则宽度也没法做到,如果可以实现以上需求的话,那区不区分区分高宽都无所谓了,何必还多增加一个条件变量,让你选择是以宽为基准还是以高为基准呢。https://mp.weixin.qq.com/s/SDHL26XgIjjlK-RLd_SSCw
from androidautosize.
我测试在小米mix2上,以高度为基准也不能占满屏幕高度,
from androidautosize.
setPrivateFontScale使用后如何刷新呢,目前需要重启app才能刷新字体大小
from androidautosize.
华为平板启动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)
from androidautosize.
找不到资源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
from androidautosize.
注释掉使用的代码,其他ID又报错,没法用
from androidautosize.
@yyc2413 重建所有Activity,或调用一次 setDensity 后重绘所有用到字体的 View
from androidautosize.
Related Issues (20)
- 关于.9.png图的位置放置问题
- 改变density导致滑动手势的判定出现问题,已附上解决方案。
- 项目中用了这个库,折叠屏如何适配?
- 请问现在2023年了,安卓官方还没弄好自动适配? HOT 1
- 虚拟导航栏适配问题 HOT 1
- 使用了AndroidAutoSize后,系统设置改变字体,切回App, Activity重建,但是布局文件内的字体不会自动适配改变 HOT 4
- 在使用了腾讯的超级播放器的页面中适配,在夜神模拟器上十分卡顿 HOT 2
- android该方案的实现思路有对应的flutter解决方案吗 HOT 1
- 广告
- Vivo X Fold2 折叠屏多窗模式下 resource的xdpi无法被修改
- Android 14 Cannot showing default system SoftKeyboard HOT 5
- 华为折叠屏折叠状态下和展开状态下的问题
- 统一隐私政策之前初始化sdk,因为调用了getApplicationInfo提示不合规,怎么处理 HOT 2
- Android 14 适配问题
- Android 14 系统软键盘无法弹出 HOT 5
- Compose 没有效果
- 平板横屏项目DialogFragment高度显示不全问题 HOT 4
- Android14 设置不跟随系统字体大小改变失效 HOT 2
- Android 14部分手机输密码时黑屏
- 设置resizeableactivity=false并且页面横屏在小米上不兼容
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from androidautosize.