【问题标题】:android:tint on background drawable of a layout on sdk<21android:tint on background drawable on sdk <21
【发布时间】:2017-07-31 16:13:41
【问题描述】:

我知道在 sdk 21 之前有很多主题讨论色调功能,但是 他们要么使用某种图像视图(我不这样做),要么以编程方式解决它(我不想这样做)。

我的情况:

我有一个约束布局,以 9-patch 可绘制为背景:

<android.support.constraint.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/testDrawable">

这是我的可绘制对象:

<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ninepatchdrawable"
android:tint="@color/lightBlue"
android:tintMode="multiply" />

这适用于更新的设备,但正如我所说,色调不适用于 sdk

我已经尝试将布局更改为:

<android.support.constraint.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/testDrawable"
        android:backgroundTint="@color/lightBlue"
        android:backgroundTintMode="multiply">

或在另一个问题中使用 app:backgroundTint 作为建议集。

提前致谢

【问题讨论】:

  • 使用DrawableCompat#setTint(Drawable drawable, int tint)

标签: android android-layout android-drawable


【解决方案1】:

你可以试试这样的:

ImageView.getDrawable().setColorFilter(new PorterDuffColorFilter(context.getResources().getColor(**color**), PorterDuff.Mode.SRC_IN));

不要相信它会使用较低的 API -> 但它是动态更改色调的好方法

【讨论】:

    【解决方案2】:

    有一个明显的原因。

    如果您检查docs。第一行的第一部分是:

    使用 Android 5.0(API 级别 21)及更高版本,

    因为android:tint 是在 API 21 中与 Material Design 一起添加的。而且因为它是在 API 21 中添加的,所以它是一个在 API 20 及更低版本中没有意义的标签。

    使用支持库(appcompat 库)应该允许您使用它。您需要添加另一个命名空间,但这不是最重要的工作。你也可以在styles.xml中做

    正如您在this question 中看到的那样,backgroundTint 完全不同

    【讨论】:

    • 耶,我已经知道它是在 api 级别 21 中引入的,这就是为什么我知道我的问题低于此。我还没有找到如何使用支持库直接在xml中设置色调,你能给我一个提示吗?
    • 首先,你需要这个 Gradle 依赖:compile 'com.android.support:appcompat-v7:25.3.1'。如果您的目标不是 API 25,则需要不同的版本。其次,我建议您在这部分使用 styles.xml,您可以创建一个新样式并添加您想要的任何内容。然后添加这一行:&lt;item name="tint"&gt;#FFF&lt;/item&gt; 在其中将#FFF 替换为@color 资源或您想要的颜色。在tint 前面添加android: 表示您使用的是ANdroid 资源而不是appcompat 资源
    • 我按照你说的做了一切,我得到了Error:(1714, 21) No resource found that matches the given name: attr 'tint'。我的目标 api 是 24,我使用以下支持库版本:compile 'com.android.support:appcompat-v7:24.2.1'
    • 更正:(我的错)你需要一个 AppCompatImageView 并使用android:tint。它应该适用于九个补丁
    • 不是从外观上看,因为那是不同的东西。我想我有一个想法,但我不确定它是否有效,因为我无法测试它。保留可绘制文件。添加一个 FrameLayout 作为根布局。在 framelayout 内部和 constintlayout 外部,您有 APpCompatImageView。那里有色调和所有这些。 阅读: 添加框架布局。不要删除 ConstraintLayout。添加一个 FrameLayout 作为根元素,并将 COnstraintLayout 放入其中,并将 AppCompatImageView 添加到 framelayout 中。它现在可以用作背景,你可以在上面添加东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2019-04-07
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多