gpt4 book ai didi

android - Android 的哪一部分负责选择正确的资源配置文件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:03 31 4
gpt4 key购买 nike

我有一个奇怪的问题。

在你想出点子来抨击我之前,我正在研究一种定制的 Jelly Bean。因此,“通常的好方法”在这里可能行不通,必须做出肮脏的解决方法。

我有一个 APK,其中包含以下 Assets :

layout
layout-mdpi
layout-land
layout-large-mdpi
layout-large-land-mdpi
layout-large-hdpi
layout-large-xhdpi

其他一些指标代码返回了这个:

D/AppDemo( 2091): measured width: 1920 PE width: 1920 scaleFactor = 1.0
D/AppDemo( 2091): [ANDROID] measured width: 1920 measured height: 1080
D/AppDemo( 2091): [ANDROID] scale for resources: 2.0 xdpi: 320.0 ydpi: 320.0
D/AppDemo( 2091): [ANDROID] screen density: xhdpi
D/AppDemo( 2091): [ANDROID] screen size: large
D/AppDemo( 2091): [ANDROID] using layout: layout-mdpi

那么,查看指标​​,为什么没有加载 layout-large-xhdpi

请告诉我在哪里可以找到它。我真的需要找到一种方法来强制 Layout/Resource/AssetManager 加载特定布局。

我知道关于这个问题最流行的评论是“你不需要/为什么你有 layout-xhdpi,你应该有 drawable-xhdpilayout-large"但是,请耐心等待。

即使是有关查看位置和查找内容的小提示,我也会非常感激。到目前为止,AssetManager 似乎是开始挖掘/记录的地方。

当我省略 layout-mdpi 时,应用程序因缺少资源而崩溃。该错误似乎是即使代码返回 xhdpi,它也会在其他地方假定 mdpi。我需要找到它并修复它,以便我的应用程序看起来像在 ICS 上一样好:)

我正在弄清楚以一种简单的方式加载了哪个布局 - 所有根布局都有一个 android:tag 元素,当我 setContentView(R.layout.main_layout) 我捕获了根元素上的标签,知道加载了哪个文件夹。除了视觉反馈,这最终必须与我的设备配置相匹配。

提前致谢。

最佳答案

有趣的问题。我看了一下,但一切都陷入了困境。没有这样的答案,但也许我的分析会让你朝着正确的方向前进。

我查看了从 setContentView 开始发生的事情。显然,此时您正在谈论与密度无关的布局引用(例如 R.layout.main_layout),然后它会变成对 APK 中特定文件的引用。您的问题何时何地。

我使用横向/纵向限定符以便可以在运行时更改质量,并且我使用了一个附加了 Android 源代码的调试器。

这是一个流程,从某种程度上开始。

  1. Resources.getLayout(int)
  2. Resources.loadXmlResourceParser(int, String)
  3. Resources.getValue(int, TypedValue, boolean)
  4. AssetManager.getResourceValue(int, int, TypedValue, boolean)
  5. StringBlock.get(int)
  6. StringBlock.nativeGetString(int,int)

让我们逆向工作。

第 6 步是一个原生 (C) 方法,它返回合格的引用,例如/res/layout-land/yourview.xml。然而,它的参数是一个索引,它会根据我们是横向还是纵向而变化。

要查看它的来源,我们必须返回到第 4 步。索引是 TypedValue 中的一个字段,但在将其传递给此方法时最初设置不正确。

第 4 步调用另一个 native 方法 AssetManager.loadResourceValue(),它会更改传入的 TypedValue 并适本地设置索引。

也许您可以开始查看 C 并了解您的进展情况。

关于android - Android 的哪一部分负责选择正确的资源配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15087547/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com