android - @style 属性在 api 24 及更低版本上崩溃

标签 android android-layout

我有一个单独的设计库,用于共享 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}

最佳答案

在您的 <style name="Button.Secondary.Large" parent="Button.Secondary">

  • 添加以下两行以支持 API 17 之前的版本

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

  • DrawableTint

    <item name="android:drawableTint">仅在 API 23 及更高版本中使用,因此请注意,它在较低版本中可能不会按预期运行

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

    要解决此问题,您可以直接调用辅助颜色,例如 @color/colorSecondary

关于android - @style 属性在 api 24 及更低版本上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50933254/

相关文章:

android - 较新版本的 Android Studio 和只有两个可绘制目录 - drawable 和 drawable-v21

android - 这段代码为什么不能在onCreate之后填充ListView?

android - App Engine - RequestFactory 与 servlet 与其他方法

安卓-Achartengine XYScatter OnclickListener

android - GLSurfaceView 没有出现在 MapView 上

java - 如何将 Image View 和 TexView 左右对齐?

android - ListView 行样式 - 文本左对齐,图标右对齐

java - 在运行时将按钮添加到布局

Android - 在 java 和 NDK 中为 PIXEL 获取不同的值

java - 如何更改来自不同类的变量?