我正在编写一些自定义视图,它们共享一些相同的命名属性.在attrs.xml中各自的<declare-styleable>部分中,我想对属性使用相同的名称:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView1">
        <attr name="myattr1" format="string" />
        <attr name="myattr2" format="dimension" />
        ...
    </declare-styleable>

    <declare-styleable name="MyView2">
        <attr name="myattr1" format="string" />
        <attr name="myattr2" format="dimension" />
        ...
    </declare-styleable>
</resources>

我得到一个错误,说myattr1myattr2已经被定义了.我发现应该在MyView2中省略myattr1myattr2format属性,但如果这样做,我会在控制台中得到以下错误:

[2010-12-13 23:53:11 - MyProject] ERROR: In <declare-styleable> MyView2, unable to find attribute 

有没有办法做到这一点,也许是某种名称空间(只是猜测)?

推荐答案

Solution:只需从两个视图中提取公共属性,并将其直接添加为<resources> node 的子 node :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="myattr1" format="string" />
    <attr name="myattr2" format="dimension" />

    <declare-styleable name="MyView1">
        <attr name="myattr1" />
        <attr name="myattr2" />
        ...
    </declare-styleable>

    <declare-styleable name="MyView2">
        <attr name="myattr1" />
        <attr name="myattr2" />
        ...
    </declare-styleable>
</resources>

Android相关问答推荐

为什么使用. DeliverveAsState()时会出现空指针异常?

如何解决Android Studio中的in fragment问题

Google Play测试应用程序Crash-java.lang.NoSuchFieldError:没有Lkotlinx/coroutines/CoroutineExceptionHandler类型的字段键

RemoteActivityHelper.startRemoteActivity不适用于Android Wear OS 4模拟器

Android 14(Oneui 6)中的本地推送通知行为不一致

Android Gradle/Groovy,如何将文件复制到APK

如何从Android 12的来电中获取电话号码?

用于小部件泄漏警告的伙伴对象中的Kotlin Lateinit

两首合成曲的喷气背包动画

如何在同一行中滚动自定义布局和惰性列,就好像它们是一个组件一样

如何在我的sqlite数据库中获取某个玩家的分数

SQLite Kotlin 问题 - 没有数据库

当父布局的背景为浅色时,Android ProgressBar 背景 colored颜色 变为灰色

在 Material 3 TopAppBar 代码的哪个位置定义了填充?

Kotlin File(path).walkTopDown() 找不到文件

PayUCheckoutPro Android SDK 实现问题

在compose中,为什么修改List元素的属性,LazyColumn不刷新

为什么我不能直接记住 mutableStateOf 可组合函数?

如何在 Android 应用中录制短视频?

如何从我的 android 应用程序中删除 QUERY_ALL_PACKAGES 权限?