Шаг 1. Поскольку вы еще не знакомы, сначала подготовьте большое изображение xxxhdpi png, чтобы поиграть с ним.
Шаг 2. Желаемое расширяемое поле изображения должно быть как можно короче (путем удаления избыточной/повторяющейся части цвета), поскольку 9-патч не "уменьшает", а "расширяет" изображение.
Я лично использую инструмент командной строки ImageMagick для его преобразования, например:
convert -trim 'my_image.png' png32:my_image_trim.png #trim extra transparent surrounded image
rm lala*; convert my_image_trim.png -crop 310 +repage +adjoin png32:lala%02d.png #cut redundant/repeat center part
convert +append lala02.png lala05.png png32:out_right.png #append left/right images side by side
convert -resize 144x144\! out_right.png png32:my_image.png #resize to the desired dpi
При преобразовании есть одна ошибка: я должен добавить префикс png32, иначе я получу черное изображение с 9 патчами, см. эту тему .
Шаг 3. Скопируйте изображение в формат Android Studio, затем щелкните правой кнопкой мыши и выберите пункт меню «Создать файл 9-исправлений…». Новое изображение .9.png будет сгенерировано с тем же именем изображения. Теперь можно просто удалить исходное изображение. Будьте осторожны, играя с рефакторингом для переименования для резервного копирования, поскольку он также переименует идентификатор изображения XML и заставит вас задаться вопросом, почему изображение с 9 исправлениями не работает, поскольку XML по-прежнему ссылается на изображение без 9 исправлений.
Шаг 4. Две черные линии слева и сверху образуют расширяемую прямоугольную область, а две черные линии справа и снизу образуют прямоугольную область текста.
Размер вашего изображения будет увеличиваться в заявленной расширяемой области по мере роста текста. В то время как текстовая область означает, что текст разрешен только в этой области.
Вам не нужно рисовать черные точки/линии с нуля для простоты использования, 4 черные линии уже существовали за верхом, слева, внизу, справа на этом изображении, если ваше изображение с 9 патчами создано Android Studio. «Увеличьте масштаб», чтобы увеличить, если вы не видите, чтобы перетаскивать эти линии.
Исходное положение двух черных линий, вертикальной и горизонтальной, объявляет расширяемую область:
- Исходное положение левой вертикальной линии находится между верхним левым и нижним левым
- Исходное положение верхней горизонтальной линии находится между верхним левым и верхним правым.
Исходное положение двух черных линий, вертикальной и горизонтальной, объявляет текстовую область:
- Исходное положение правой вертикальной линии находится между правым верхним и правым нижним углами.
- Исходное положение нижней горизонтальной линии находится между нижним левым и нижним правым.
Выше показано исходное положение черных линий до того, как вы начнете перетаскивать их, чтобы уменьшить длину и отрегулировать начальное и конечное положение этих линий.
Как расширяемые, так и текстовые области могут быть разными в зависимости от ваших потребностей. Но обычно расширяемая область должна быть равна или меньше площади текста, классическим примером будет изображение всплывающей подсказки чата:
![введите здесь описание изображения](https://i.stack.imgur.com/YyBpw.png)
Изображение выше имеет одинаковую ширину верхней и нижней черных линий, но правая черная линия выше левой, что также означает, что текст постоянно остается на половине нижней кривой как в минимальном, так и в расширенном размере. И он расширяется только в текстовой области.
Теперь вы знаете два преимущества 9-Patch: нижняя и правая строки вместе образуют текстовую область, которая прекрасно гарантирует, что текст никогда не выйдет за пределы кривой изображения! А также определено, какая часть текстовой области отвечает за расширение изображения по мере роста текста, при этом сохраняя кривую без масштабирования.
Наведите курсор на линию, чтобы увидеть позиции x, y в пикселях, это поможет измерить, что обе линии равны или меньше в позиции.
Вы должны помнить положение строки при перетаскивании, так как левая строка может перетаскиваться вправо, а правая строка может перетаскиваться влево, и вы можете потеряться в том, какая строка является расширяемой, а какая строкой является текстовой.
Есть 2 важных флажка, которые вы должны отметить, т.е. флажки «Показать исправления» и «Показать плохие исправления».
Установите флажок «Показать плохие участки», если вы рисуете расширяемую область, но покрываете изогнутую линию вашего изображения вместо прямой линии, тогда эта область будет помечена как красная, чтобы предупредить вас. Вы можете сузить очередь, чтобы отклонить это красное предупреждение, или просто проигнорировать его. Имейте в виду, что красное предупреждение может ввести в заблуждение, что на самом деле может быть вызвано противоположной линией, в этом случае вам нужно сузить противоположную линию, чтобы отклонить это красное предупреждение.
Шаг 5. В XML вы можете ссылаться на это изображение как на фон TextView, как показано ниже, используйте wrap_content
, чтобы сделать его расширяемым:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/your_9_patch_image_name_excluded_.9"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<2nd TextView />
</LinearLayout>
Когда вы впервые играете с ним, он гарантирует отсутствие заполнения текстового или причудливого родительского макета, иначе вы можете задаться вопросом, почему он не работает должным образом.
Пример фона кнопки:
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:background="@drawable/your_9_patch_image_name_excluded_.9"
android:layout_gravity="center"
/>
person
Fruit
schedule
16.07.2018