【问题标题】:How to get drawable resource from boolean resource如何从布尔资源中获取可绘制资源
【发布时间】:2020-05-04 17:47:00
【问题描述】:

有没有办法从布尔资源中获取可绘制资源?

例如:

bools.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="use_version_1_drawables">true</bool>
</resources>

my_drawable.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/my_drawable_version_1"/>
    <item android:drawable="@drawable/my_drawable_version_2"/>
</selector>

是否有我应该使用的特定状态,因为据我了解,它们都与特定事件(检查、聚焦等)有关。也许我不应该使用选择器。我只是想拥有一个我可以调用的资源,它实际上链接到另外两个资源,但会根据我的布尔值选择一个。

【问题讨论】:

  • 你打算用哪种方式改变use_version_1_drawables的值?
  • @art 我正在编写一个模块,所以我打算在使用该模块时,您所要做的就是添加一个 id 为 user_version_1_drawables 的布尔值并将其设置为您想要的任何值.
  • 您可以使用可绘制 id 的数组(在 xml 中)。每个数组将有两个条目,位置 0 表示假,位置 1 表示真。例如,请参阅 this post 了解如何获取实际的可绘制对象

标签: android android-studio android-drawable android-selector


【解决方案1】:

你很接近。您可以将选择器视为 if/else 语句。你现在缺少的是你的实际状态。这是一个例子:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="?attr/colorPrimaryDark" android:state_checked="true" />
    <item android:color="@color/gray" android:state_checked="false" />
</selector>

如果您将它与复选框之类的东西一起使用,那么只需将此选择器设置为复选框的可绘制资源,state_checked 将自动更新。

编辑:问题稍微复杂一些,并在 cmets 中解决。

【讨论】:

  • 我实际上将可绘制对象用作导航项的图标,因此android:state_checked 状态对我不起作用。我不想根据选中状态更改可绘制对象,而是只想使用或基于我的布尔值。
  • 这个视图是你创建的自定义类吗?还是来自某个导航组件?
  • 仅用于菜单中的图标。该菜单用于底部导航视图。
  • 嗯。我会想办法的。我现在能想到的最好的事情是根据该布尔值膨胀不同的菜单,但这似乎不太正确。
  • 是的,我正试图避免这种事情。
猜你喜欢
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多