Можете ли вы поместить DrawableShape или фигуру «непосредственно в» макет?

#android #xml #drawable

#Android #xml #drawable

Вопрос:

В основном XML-файле activity моего приложения у меня есть макет с некоторым представлением изображения:

 <LinearLayout
..>
<ImageView
    .../>
<ImageView
    ..."/>
</LinearLayout>
  

Пока проблем нет. Отдельно я определяю blob.xml это просто большая белая точка.

blob.xml:

 <?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#ff0000"/>
    <size android:width="32dp" android:height="32dp"/>
</shape>
  

Конечно, я могу поместить большой двоичный объект «в» изображение, подобное этому:

 <LinearLayout
..>
<ImageView
    .../>
<ImageView
    ..."/>
<ImageView
    android:src="@drawable/blob"
    .../>
</LinearLayout>
  

Это все фантастика. Я больше никогда не буду разрабатывать для iOS! Но есть ли способ просто напрямую поместить «shape» внутри XML-макета? Итак, что-то вроде..

 <LinearLayout
..>
<ImageView
    .../>
<ImageView
    ..."/>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#ff0000"/>
    <size android:width="32dp" android:height="32dp"/>
</shape>
</LinearLayout>
  

или, возможно…

 <LinearLayout
..>
<ImageView
    .../>
<ImageView
    ..."/>
<ImageView
android:src={
   <shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#ff0000"/>
    <size android:width="32dp" android:height="32dp"/>
   </shape>
   }
   >
</LinearLayout>
  

Или что-то в этом роде!

Опять же, по сути, «не используя отдельный чертеж / файл»

Возможно ли это? Извините, трудно найти это как таковое, задокументированное в Android.

Ответ №1:

Нет, невозможно определить встроенный чертеж (пока)


В любом случае, если вы чувствуете себя мазохистом, вы можете создать drawable на Java, а затем назначить его своему представлению.
Но это, на мой взгляд, было бы излишним.

Я использую эту технику только при принудительном использовании.


Далее (если вы действительно чувствуете себя развратно 😉), есть еще один метод, который заключается в создании пользовательского представления и переопределении метода onDraw, чтобы полностью нарисовать его самостоятельно.

Я использую эту технику, только если мне нужно создать что-то действительно новое (т. Е. Какой-То вид, недоступный среди стандартных), например, вращающуюся ручку или датчик или что-то еще.

Своего рода боль, но она дает свои результаты.

Комментарии:

1. Согласен, это невозможно, вы бы просто ссылались на рисуемый файл как на внешний ресурс.

2. Великолепно. Спасибо, ребята! Чтобы быть абсолютно ясным, вы не можете поместить ‘

3. что касается «переопределения onDraw». это то, что мы должны делать каждый раз в iOS .. чтобы что-то делать 🙂

4. Я не завидую разработчикам iOS … 😉

5. Ну, у вас все еще есть возможность создавать вещи «а-ля iOS», когда все остальное не соответствует вашим потребностям 😉