Как разместить новые ресурсы-заполнители в проекте Android Studio ( "инструменты: образец" )?
Фон
Иногда вы хотите поместить некоторые заполнители для отображения только в среде IDE в файлах макетов.
В качестве примера вы можете использовать это:
<ImageView tools:src="@tools:sample/avatars" ... />
И получите это в предварительном просмотре:
![введите описание изображения здесь]()
Такие файлы не являются частью APK, которую вы получаете при создании своего приложения, поэтому его можно использовать только для разработки.
Это то, что мне сказали из здесь:
С образцовыми данными в 3.0 вы можете теперь иметь изображения-заполнители, которые а не часть скомпилированного apk. Вам просто нужен каталог sampledata в ваш проект с подкаталогом, содержащим все изображения, которые вы хотите использовать в качестве заполнителей. Вы можете ссылаться на эти изображения из "инструментов", атрибутов. Кроме того, есть предопределенные фондовые изображения, такие как @sample/avatars или @sample/background/scenic
Проблема
Я не могу найти, как добавить больше таких изображений в проект (так что они будут использоваться только в среде IDE, а не в APK), и если есть способ разместить другие ресурсы, кроме изображений.
На самом деле я не могу найти документы этой функции.
Что я пробовал
Я попытался поместить изображение на "res/sampledata" и попробовал "res/sample", но в обоих случаях мне не удалось найти его.
Вопросы
- Что такое название этой функции?
- Как я могу поместить файл изображения в проект и использовать его как заполнитель таким образом? В какой папке?
- Можно ли добавить больше изображений, которые будут использоваться таким образом?
- Можно ли добавить другие ресурсы? Макеты? Строки?
- Есть ли дополнительные возможности этой новой функции?
Ответы
Ответ 1
Что такое название этой функции?
Неподтвержден официальным источником, но скорее всего он называется "Sample Data".
Как я могу поместить файл изображения в проект и использовать его как заполнитель таким образом? В какой папке?
В отличие от ресурсов, таких как изображения, шрифты и т.д. Образцы данных не входят в /res/
(они не компилируются с помощью приложения, следовательно. Вероятно, проще их отфильтровывать, помещая их в полностью отдельный каталог), Они входят в /app/sampledata/
, например: /app/sampledata/image.png
.
Вы можете создать папку sampledata, щелкнув правой кнопкой мыши на приложении и сделав New > Sample Data directory
:
![введите описание изображения здесь]()
Затем вы можете ссылаться на них следующим образом: @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/
.
Есть ли дополнительные возможности этой новой функции?
Не уверен в это время.
Ответ 2
Со своей стороны я пытался использовать файл изображения в качестве заполнителя для просмотра изображений, используя tools:src="..."
: я поместил свой файл PNG в подкаталог sampledata
, но он либо не отображался, либо отображался как испорченное изображение.
После небольшой тряски я нашел кое-что, что решило мою проблему:
- создайте подкаталог
sampledata
с именем: drawable
- Поместите файл png/jpg в этот каталог и добавьте имя файла с помощью _drawable. Пример:
image.png
→ image_drawable.png
Только тогда появился заполнитель.
Вы можете создавать подкаталоги из drawable
так, как считаете нужным, чтобы сохранить ваши образы организованными, но важно то, что drawable
остается родительским каталогом.
У меня нет никакой документации или источников, чтобы поддержать меня, но я полагаю, что это может быть полезно для других в той же ситуации.
Ответ 3
Я думаю, что вы получили ответ на другие вопросы именно от людей, которые ответили до меня, но я могу дать вам обходное решение именно для этого вопроса
Можно ли добавить больше изображений для использования таким образом?
Я сталкивался с этой проблемой довольно долго и нашел для нее обходной путь.
Моя проблема заключалась в том, что я не мог использовать placeHolderImage
в SimpleDraweeView
, который является частью библиотеки Фреско Facebook, если вы не знали. Но поскольку ImageView
не так сложен, как SimpleDraweeView
, и поскольку обходной путь работал с SimpleDraweeView
, даже если я не пробовал его с ImageView
, он, безусловно, мог бы работать и с ним.
Вот решение.
Вам просто нужно создать файл 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.
Мой код 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
может быть vertical
или horizontal
в зависимости от вашего варианта использования.
Вы можете просто использовать tools:src="@sample/your_json_file.json/data/image
внутри своего XML файла элемента повторного просмотра ImageView
, чтобы загрузить туда образцы изображений.
Попробуйте и дайте мне знать, если это работает в вашем случае или нет.