【问题标题】:@style attribute crashes on api 24 and lower@style 属性在 api 24 及更低版本上崩溃
【发布时间】:2018-06-19 16:43:30
【问题描述】:

我有一个用于共享 UI 组件和样式的单独设计库。

<style name="Button.Secondary" parent="Button">
    <item name="android:background">@drawable/secondary_button_state</item>
    <item name="android:textColor">@color/blue</item>
</style>

<style name="Button.Secondary.Large" parent="Button.Secondary">
    <item name="android:drawableRight">@drawable/ic_chevron</item>
    <item name="android:drawableTint">?android:colorSecondary</item>
    <item name="android:paddingStart">8dp</item>
    <item name="android:paddingEnd">8dp</item>
    <item name="android:gravity">center|start</item>
    <item name="android:textAppearance">@style/Subhead.Large</item>
    <item name="android:fontFamily">sans-serif-thin</item>
</style>

在我的应用中,我使用了我的设计库中的按钮样式属性。

<Button
    android:id="@+id/share_button"
    style="@style/Button.Secondary.Large"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="Share Crew"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/crew_specialty_label" />

Api 25 及更高版本可以正常工作,没有任何问题。使用该样式的 Api 24 及更低版本的组件无法膨胀。

android.view.InflateException: Binary XML file line #100: Binary XML file line #100: Error inflating class Button
    Caused by: android.view.InflateException: Binary XML file line #100: Error inflating class Button
    Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 79: TypedValue{t=0x2/d=0x1010530 a=3}

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    在你的&lt;style name="Button.Secondary.Large" parent="Button.Secondary"&gt;

    • 添加以下两行以支持比 API 17 更早的版本

      <item name="android:paddingLeft">8dp</item> <item name="android:paddingRight">8dp</item>

    • 可绘制色调

      &lt;item name="android:drawableTint"&gt; 仅在 API 23 及更高版本中使用,因此请注意它在较低版本中的行为可能与预期不同

    • ?android:colorSecondary 需要 API 25 才能工作

      要修复,您可以直接调用辅助颜色,例如 @color/colorSecondary

    【讨论】:

    • 看起来 ?android:colorSecondary 是罪魁祸首。
    【解决方案2】:

    可能值得检查 android:colorSecondary 是否在早期的 API 中:

    Style attribute attr/colorSecondary not found

    【讨论】:

      猜你喜欢
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2016-06-22
      • 2013-03-26
      相关资源
      最近更新 更多