当你在Android中制作布局时,你可以制作像TextView或ImageView这样的默认视图.但是,当您使用AppCompat或material 库时,它们会自动将这些视图映射到AppCompat或material 视图.所以我的问题是,他们如何做到这一点,而我又如何做到这一点?

例如,我有一个自定义的MyTextView,我希望所有的TextView视图都映射到MyTextView.

推荐答案

这是您的活动(从AppCompatActivity扩展)在幕后做的一些事情.

基本上它看起来是这样的:

  1. Activity使用LayoutInflator.Factory2接口的自定义实现调用默认layoutInflatorsetFactory2方法.
  2. 此实现将所有createView个调用传递给AppCompatViewInflater类的实例.
  3. AppCompatViewInflater判断它需要创建的视图的名称,并创建AppCompat视图而不是默认视图(如果有).

对于material ,情况相同,但使用的是MaterialComponentsViewInflater,而不是AppCompatViewInflater.

你可以通过从AppCompatViewInflater(或material )扩展来制作你自己的CustomViewInflater,并将这一行与你的充气机的路径放入你的应用程序主题中:

<item name="viewInflaterClass">your.app.package.CustomViewInflater</item>

Android相关问答推荐

Android:点击操作栏返回按钮后应用程序无react

致命信号6(SIGABRT)MAUI应用程序在android net发布时崩溃.8、使用强制屏幕方向和并发GC

垂直居中图标

Android 14无法删除已配置的文件

安卓喷气背包组成倒计时动画

为什么Kotlin允许将非空值类型化为可空类型,但又将其视为非空值?

从片段导航回来

android crashlytics 显示崩溃但不显示我的课程中的位置

如何用jetpack compose实现垂直李克特量表

Electric Eel 后 Gradle 项目同步失败 | 2022.1.1更新

在 Jetpack Compose 中重用具有重复代码的列

如何将一个 Composable 作为其参数传递给另一个 Composable 并在 Jetpack Compose 中显示/运行它

PayUCheckoutPro Android SDK 实现问题

在 Jetpack Compose 中单击时更改表面项目的背景 colored颜色

在 Jetpack Compose 中更改列中子项的对齐方式

单击 Jetpack Compose(单选)时,我无法为列表中的单个文本着色

为 AlertDialog 的消息文本设置自定义字体

在 Jetpack Compose 中 Select 要省略的文本

如何让用户与任意应用程序共享文件?

将生成的 AAR 与 Composables 一起使用时未解决的参考