【问题标题】:How to put new placeholder resources into Android Studio project ("tools:sample" resources)?如何将新的占位符资源放入 Android Studio 项目(“工具:示例”资源)?
【发布时间】:2018-02-21 20:53:07
【问题描述】:

背景

有时,您希望将一些占位符仅在 IDE 的布局文件中显示。

作为一个例子,你可以使用这个:

<ImageView tools:src="@tools:sample/avatars" ... />

在预览中得到这个:

此类文件不是您在构建应用时获得的 APK 的一部分,因此仅用于开发是安全的。

这是here告诉我的:

使用 3.0 中的示例数据,您现在可以拥有占位符图像 不是已编译的 apk 的一部分。您只需要一个 sampledata 目录 你的项目有一个包含你想要的所有图像的子目录 用作占位符。您可以从“工具”中引用这些图像 属性。此外,还有预定义的库存图片,如 @sample/avatars 或 @sample/background/scenic

问题

我找不到如何将更多此类图像添加到项目中(这样它们只会在 IDE 中使用,而不是 APK 的一部分),如果有办法放置其他资源,除了图片。

事实上我找不到这个功能的文档。

我尝试了什么

我尝试将图像放在“res/sampledata”上并尝试在“res/sample”上,但在这两种情况下我都无法访问它。

问题

  1. 这个功能叫什么名字?
  2. 如何将图像文件放入项目中,并以这种方式将其用作占位符?在哪个文件夹中?
  3. 是否可以通过这种方式添加更多图片?
  4. 是否可以添加其他资源?布局?字符串?
  5. 这个新特性还有更多功能吗?

【问题讨论】:

  • @Raghunandan 我没有看到那里提到它。
  • 喜欢tools:srcCompat="@tools:sample/avatars" ?如果我有@sample/avatar 则错误。
  • @Raghunandan 是的。这就是问题。如何以这种方式将更多图像放入项目中,以便在 IDE 预览中显示,但图像不会真正成为 APK 的一部分。我想了解更多有关此功能的信息。
  • 嗯。我的坏我理解不同。

标签: android android-studio


【解决方案1】:

这个功能叫什么名字?

未经官方来源证实,但可能称为“样本数据”。

如何将图像文件放入项目中,并以这种方式将其用作占位符?在哪个文件夹中?

与图像、字体等资源不同。示例数据不在/res/ 中(因此它们没有与应用程序一起编译。通过将它们放在完全独立的目录中可能更容易过滤掉它们) .他们进入/app/sampledata/,例如:/app/sampledata/image.png

您可以通过右键单击应用程序并执行New &gt; Sample Data directory来创建sampledata文件夹:

然后你可以像这样引用它们,@sample/

<ImageView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    tools:src="@sample/test.png" />

虽然这没有给出任何错误,但遗憾的是该功能现在似乎有问题,因为图像不会显示在预览中,无论它们是否放置在子目录中(尝试过 png、jpeg、jpg、xml) .

有趣的是,将单个图像放在子目录中并引用该子目录而不是特定图像似乎可行:

这个结构

结合这些参考资料

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:background="@sample/image">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        tools:src="@sample/avatar" />

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        tools:src="@sample/jpeg" />

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        tools:src="@sample/vector" />

</LinearLayout>

生成此预览。请注意我是如何利用tools:background 将布局背景设置为示例图像的。

是否可以添加更多图片以这种方式使用?

是的,只需将它们添加到文件夹中即可。

是否可以添加其他资源?布局?字符串?

它似乎也不支持。如果您尝试定义其他类型的资源,您可能会因为无法识别关键字而出现一堆语法错误,或者您无法使用tools:src="@sample/ 表示法来引用它们。

这个新功能还有更多功能吗?

目前不确定。

【讨论】:

  • 不错。您是如何找到这些信息的?试一试?
  • @android 有点尝试,有点常识
  • sampleData 文件夹也位于 android-studio/plugins/android/lib/sampleData。头像都是矢量绘图,它们从 1 到 16。它只是图片之一。我犯了一个小错误,在项目的根文件夹而不是 app 中创建示例目录,因此无法引用 xml 中的示例文件夹
  • 如何添加字符串?像“@tools:sample/date/day_of_week”中的那些?
  • @CarsonH​​olzheimer 无论如何都要尝试构建。最新版本的 AS 在解析实际存在的符号时存在很多问题
【解决方案2】:

在我这边,我尝试使用 tools:src="..." 将图像文件用作 Imageview 的占位符:我确实将我的 PNG 文件放在了 sampledata子目录中,但它要么不会显示,要么显示为损坏的图像。

经过一番摆弄后,我找到了解决问题的方法:

  • 创建一个名为sampledata 的子目录:drawable
  • 将您的 png/jpg 文件放在此目录中,并在文件名后附加“_drawable”。例如:image.png -> image_drawable.png

只有这样占位符才出现。 您可以从 drawable 创建您认为合适的子目录以保持示例图像井井有条,但重要的是 drawable 似乎仍然是父目录。

我没有任何文档或资源来支持我,但我认为它可能对处于相同情况的其他人有用。

【讨论】:

  • 我无法使用 Android Studio 3.3 让它工作。我只是得到无法解决符号错误
  • @CarsonH​​olzheimer 添加示例数据后重启Android studio
  • 样本数据是否支持 svg 文件?
  • 如何引用样本数据? Studio 仅建议 tools:src="@sample/drawable" 如此文件夹的名称。这会导致预览中显示 res not found 图像
【解决方案3】:

我猜你已经从我之前回答的人那里得到了其他问题的答案,但我可以为你提供一个特别是这个问题的解决方法

是否可以添加更多图片以这种方式使用?

我已经面对这个问题很长时间了,并找到了解决方法。

我的问题是我不能在 SimpleDraweeView 中使用 placeHolderImage,这是 Facebook Fresco 库的一部分,如果你不知道的话。但是由于ImageView 不像SimpleDraweeView 那样复杂,并且由于解决方法适用于SimpleDraweeView,即使我没有尝试过使用ImageView,它也可能适用于它。

这是解决方案。

您只需要在 sampledata 文件夹中创建一个 json 文件,但这一次,您必须这样做。

    {
      "data": [
        {
          "image": "@drawable/ic_jam_jar"
        },
        {
          "image": "@drawable/ic_rice_bag"
        },
        {
          "image": "@drawable/store_avatar"
        },
        {
          "image": "@drawable/exclamation_icon"
        }
      ]
   }

如您所见,我使用 drawable 资源的引用代替了 image 键的值。它适用于我的情况。你在这里得到的是一组图像资源,你可以在 RecyclerView 的项目中使用这些资源,以便在 Android Studio 的 Design View 中进行预览。

我的RecyclerView代码如下

<androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/product_desc_rec_view"
                        android:layout_width="match_parent"
                        android:layout_height="350dp"
                        tools:itemCount="6"
                        app:spanCount="6"
                        android:orientation="vertical"
                        app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
                        tools:listitem="@layout/product_desc_item"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent" />

请记住不要跳过我使用的任何额外标签,因为如果您错过任何标签,它可能不会在预览中产生所需的输出。您可以根据您使用的图像数量的要求自定义itemCount 属性值。 此外,根据您的用例,orientation 可能是 verticalhorizontal

您可以简单地在您的 recyclerview 项目 xml 文件的 ImageView 中使用 tools:src="@sample/your_json_file.json/data/image 来加载示例图像。

尝试一下,让我知道这是否适用于您的情况。

【讨论】:

    【解决方案4】:

    tools:src="@tools:sample/avatars[5]"

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/imageView"
        android:layout_width="50dp"
        android:layout_height="50dp"
        tools:src="@tools:sample/avatars[5]"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>
    

    【讨论】:

      猜你喜欢
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 2012-04-01
      • 1970-01-01
      相关资源
      最近更新 更多