【问题标题】:Android: Default attributes for custom viewsAndroid:自定义视图的默认属性
【发布时间】:2012-05-17 17:37:42
【问题描述】:

我有一个扩展框架类之一的自定义视图。 Android 中的大多数Views 都为它们定义了一些默认属性(例如Button 可点击,由android:clickable="true" 设置)。

如何为我的自定义视图提供应用程序范围的默认值?

【问题讨论】:

  • 我不是在问如何定义自定义属性。我已经这样做了。我想要的是为这些属性定义一些默认值,以便可以将视图添加到布局文件中而无需设置一些额外的属性。

标签: android attributes custom-controls attr


【解决方案1】:

我就这样解决了自己的问题:

res/values/attrs.xml

<resources>
    <attr name="customViewStyle" type="reference" />
</resources>

res/values/styles.xml

<resources>
    <style name="AppTheme" parent="@android:style/Theme.Light">
        <item name="android:background">@drawable/bg_light</item>
        <item name="customViewStyle">@style/CustomView</item>
    </style>

    <style name="CustomView">
        <item name="android:clickable">true</item>
        <item name="android:focusable">true</item>
        <item name="android:focusableInTouchMode">true</item>
    </style>
</resources>

然后,您只需将清单中的主题设置为 AppTheme。这也适用于使用 android:[widget]Style 代替 AppTheme 定义中的 customViewStyle 的标准小部件。

【讨论】:

  • 这如何应用到您的视图中? customViewStyle 在哪里与您的 View 实现相关联?
  • @cottonBallPaws,以下为我指明了正确的方向:stackoverflow.com/a/31505624/5166250
【解决方案2】:

您还可以为此布局创建一个样式并设置您使用视图的样式。

来源:http://developer.android.com/guide/topics/resources/style-resource.html

【讨论】:

  • 使用样式标签只是在布局文件中设置单个属性的快捷方式——这不是我想要完成的。我想要一些默认的外观/属性,然后任何使用我的自定义视图的人都可以使用样式标签来进一步修改它。可以这样想:当您将 TextView 添加到布局时,它具有文本大小、文本颜色等的默认值。这些必须来自某个地方,因为您不必指定样式或任何东西。您更改的属性或引用的样式将应用于这些默认值。
【解决方案3】:

我认为您需要重写带有 AttributeSet 参数的 View 构造函数,并构建您自己的修改后的 AttributeSet 以传递给超类构造函数。

编辑:更简单的是,只需让您的 View 子类构造函数调用 setClickable 等来将默认值更改为您想要的。

【讨论】:

  • 这是我最初所做的。问题是,如果另一个开发人员使用我的自定义视图并将 clickable="false" 放在他的 xml 中,那么我对setClickable() 的调用会破坏他的编程。 (也许他计划仅在用户完成某些操作后才使其可点击,例如选中复选框。)尽管 希望它可以点击,但其他人可能不会,所以我想提供一些默认行为,而无需求助于这样的内部调用。否则我需要一种方法来读取视图的所有属性,而不仅仅是我在 attrs 中定义的自定义属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多