【问题标题】:Required custom attributes必需的自定义属性
【发布时间】:2014-07-03 01:54:36
【问题描述】:

android:layout_width 和 android:layout_height 是必需的属性,即如果您没有为 Layout 指定它们,Android Studio 会告诉我“元素 x 没有必需的属性 android:layout_height。”

我在自己的类中定义了一些自定义属性,我想要求在 xml 中使用它们的任何人都指定值,就像他们必须指定 layout_width 和 layout_height 一样。

我该怎么做?有什么我可以在 attrs.xml 中添加的内容吗:

<declare-styleable name="MyStyleable">
   <attr name="myAttribute" format="float"/>
</declare-styleable>

或者可能在 style.xml 中:

<style name="MyStyle">
    <item name="myAttribute">3</item>
</style>

【问题讨论】:

    标签: android


    【解决方案1】:

    AFAIK,目前attrs 没有任何属性将它们标记为强制。 ("layout_width" 之类的都是很常见的错误,检查是不是连线到 SDK 中了)

    但是,如果缺少某个属性(您可以通过调用 TypedArray.hasValue() 来确定),您可以从自定义 View 中抛出一个 RuntimeException -- TypedArraygetLayoutDimension() 方法中执行此操作。

    如果您使用命令行工具编译缺少 "layout_width" 的应用程序(即没有 Eclipse 或 Idea 来检测缺少的属性并阻止您编译),您会得到这样的行为:您运行该应用程序,然后它立即崩溃,RuntimeException 说您缺少该属性。

    【讨论】:

    • 像魅力一样工作!谢谢!
    【解决方案2】:

    使用Android KTX,还有提供getFloatOrThrow()等类似方法的扩展函数。

    查看here

    【讨论】:

      【解决方案3】:

      试着看看这个link。有关于如何定义“wrap_content”和“match_parent”的信息。也许这会有所帮助。

      【讨论】:

        【解决方案4】:

        TypedArray 还有一些方法可以涵盖属性获取和异常抛出状态。如果您希望您的属性是必需的(不清楚),请使用它们

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-22
          • 1970-01-01
          • 2015-10-03
          • 2011-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-18
          相关资源
          最近更新 更多