当前位置: 首页 > 知识库问答 >
问题:

AppCompat如何膨胀不明确使用AppCompat小部件的布局?

苏浩瀚
2023-03-14

我在使用AppCompat时突然想到,我一直在使用<code>按钮位于我的布局XML文件中。我通过<code>view.getClass()做了一个测试。getSimpleName()并确认,即使我在XML中将其声明为按钮,被加载的类实际上是AppCompatButton

这是怎么回事,在引擎盖下?

共有1个答案

微生俊
2023-03-14

在研究这个话题以便正确提问的过程中,我自己发现了答案。

使用应用程序兼容性活动时,会发生一些有趣的事情:

  1. LayoutInflater.Factory 通过 setFactory 应用于默认的 LayoutInflaterAppCompat 中的 AppDelegateImpl 类实现工厂接口,并根据 API 级别选择其中一个类作为工厂委托。还有一个略有不同的Factory2,针对的是后来的API。
  2. 当视图从 XML 膨胀时,视图类的名称将传递到 FactorycreateView 方法中,该方法有机会重写创建的实际视图。
  3. 视图的名称将根据 AppCompatViewInflater 中的字符串硬编码哈希表进行检查,如果找到匹配项,则委托会对视图进行膨胀,而不是默认的膨胀器。
 类似资料:
  • 使用PDFBox可以读取livecycle创建的动态PDF。下面的代码读取然后写回用于创建动态PDF的xml文件。我有点担心,因为生成的文件很大,从647kb pdf开始。新的pdf 14000kb。任何人都知道如何减少生成的新文件的大小。写回pdf文件时可以设置某种类型的压缩吗?

  • 主要活动: } 片段类 错误:java.lang.runtimeException:无法启动活动ComponentInfo{com.darkweb.android.chroma2018/com.darkweb.android.chroma2018.mainactivity}:Android.view.filflateException:二进制XML文件行#0:错误inflating类在Androi

  • 我必须手动检查onresume中的夜间模式标志,并手动更新现有活动的资源,还是我做错了什么?如果我旋转设备,活动在日落后被重新创建,那么黑暗主题被正确地拾取,但在旋转之前,它仍然会显示光明主题。 支持lib23.4.0,Android版本6.0。

  • 我需要知道使用最新的AppCompat(目前为23.2.1)为材质按钮(AppCompatButton)着色的最佳(推荐)方法是什么。我从来没有想到会如此令人沮丧!我尝试了这里的大多数答案,但要么不起作用,要么产生了意想不到的结果。 我需要保持与api的向后兼容性 如果您能同时提供xml和java代码,我将不胜感激。

  • 在我应用程序清单中,我添加了Android:ConfigChanges来防止活动重新加载/在rotate上重新启动 它起作用了,但是supportActionBar(我使用的是AppCompat)用小字体保留了他的高度。 ActionBar在纵向上应该更大,在横向上应该更小,但它保持了初始值: null

  • 我正在尝试构建一个(继承的)Android项目。我正在使用Ant 在样式.xml中,存在无法解析的引用,例如: 这是我遇到的最初错误: 然后我注意到有这个appcompat引用,它在我的(OS X)机器上被破坏了: 我试图通过相对于的引用来解决这个问题: 所以现在这条路应该是正确的。但是现在当我运行: 有什么想法吗?构建这个项目最简单的方法是什么? (请注意,针对ecplise的建议对我没用。)