如何将新的占位符资源放入Android Studio项目(“工具:示例”资源)?

yjghlzjz  于 2022-11-16  发布在  Android
关注(0)|答案(5)|浏览(166)

背景
有时,您希望在布局文件中放置一些仅在IDE上显示的占位符。
例如,您可以使用以下代码:

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

在预览中看到这个:

此类文件不是您构建应用时获得的APK的一部分,因此仅用于开发是安全的。
这是我从这里得到的消息:
有了Python 3.0中的示例数据,您现在可以拥有不属于已编译apk一部分的占位符图像。您只需要在项目中有一个sampledata目录,其中包含所有要用作占位符的图像的子目录。您可以从“tools”属性引用这些图像。此外,还有一些预定义的库存图像,如@sample/avatars或@sample/background/scenic

问题

我找不到如何将更多的此类图像添加到项目中(这样它们将只在IDE中使用,而不是APK的一部分),以及是否有办法将其他资源,而不是图像。
事实上我找不到这个功能的文档。

我所尝试的

我尝试将图像放在“res/sampledata”上,并尝试放在“res/sample”上,但在这两种情况下都无法访问它。
问题
1.这个功能叫什么名字?
1.如何将图像文件放入项目中,并以这种方式将其用作占位符?在哪个文件夹中?
1.是否可以添加更多图像以这种方式使用?
1.是否可以添加其他资源?布局?字符串?
1.此新功能是否有更多功能?

qc6wkl3g

qc6wkl3g1#

这个功能叫什么名字?
未经官方证实,但它可能被称为“样本数据”。
如何将图像文件放入项目中,并以这种方式将其用作占位符?在哪个文件夹中?
与图片、字体等资源不同,示例数据不以/res/存放(它们不是用应用程序编译的,因此,将它们放在一个完全独立的目录中可能更容易过滤掉)。它们以/app/sampledata/存放,例如:/app/sampledata/image.png .
您可以通过右键单击app并执行New > 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/表示法引用它们。
此新功能是否有更多功能?
此时不确定。

0aydgbwb

0aydgbwb2#

在我这边,我尝试使用tools:src="..."将图像文件用作Imageview的占位符:我确实把我的PNG文件放在了sampledata子目录中,但它要么不显示,要么显示为一个破碎的图像。
经过一番折腾,我找到了解决问题的方法:

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

您可以根据需要从drawable创建子目录,以保持示例图像的组织性,但重要的是drawable仍然是父目录。
我没有任何文件或来源来支持我,但我认为它可能对其他处于同样情况的人有用。

3yhwsihp

3yhwsihp3#

我想你已经得到了在我之前回答的人对其他问题的准确答案,但我可以给予你一个特别是这个问题的变通解决方案
是否可以添加更多图像以这种方式使用?
我已经面对这个问题相当长的一段时间,并找到了一个变通办法。
我的问题是我不能在SimpleDraweeView中使用placeHolderImageSimpleDraweeView是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键的值。在我的例子中,它是有效的。您在这里得到的是一个图像资源数组,您可以在Android Studio的Design View中预览RecyclerView的项目中使用这些资源。
我的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来加载示例图像。
试试看,让我知道这在你的情况下是否有效。

a2mppw5e

a2mppw5e4#

工具:src="@工具:示例/头像[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"/>
1mrurvl1

1mrurvl15#

已通过Android Studio海豚测试|2021.3.1补丁1(对它要有耐心,通常它不会立即执行你键入的内容...)
以下封面

  • 可绘制对象(位图和矢量)
  • 字符串

目录/文件结构:

<project workspace dir>
├───app  (=your module name, defaults to app)
    └───sampleData
        ├───drawable
        │   ├───some_name_drawable.png
        │   ├───some_othername_drawable.png
        │   └───some_3rdname_drawable.xml   // SVG vector
        ├───some_name.json                  // strings
        ├───some_other_name.json            // other strings

使用示例图像

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

重要提示

1.包含图像的文件夹必须命名为“drawable”
1.图像/矢量的文件名必须以“..._drawable.png”(未测试.jpeg)或“..._drawable.xml”结尾

使用示例字符串

<TextView
   ...
   tools:text="@sample/some_name.json/data/something" />
<TextView
   ...
   tools:text="@sample/some_other_name.json/data/something_else"
<TextView
   ...
   tools:text="@sample/some_other_name.json/data/something_different"

其中some_name.json包含:

{
  "data": [
    { "something":"Nice sample text" },
    { "something":"Nicer other text"  },
    { "something":"Awesome text" }
  ]
}

和some_other_name.json的名称:

{
  "data": [
    { "something_else":"your text here" },
    { "something_else":"your text here" },
    { "something_else":"your text here" },
    { "something_different": "also here your text" },
    { "something_different": "also here your text" },
    { "something_different": "also here your text" }
  ]
}

重要提示

  1. Android Studio要求将“data”作为.json文件中的唯一根元素
    1.有趣,真的很好:一个.json文件可以有〉1种字符串

相关问题