- How to draw Horizontal and Vertical lines in an Android App using XML
- Как нарисовать линию в android
- Рисование линии с холстом
- Рисование линии с представлением
- Вертикальная линия в Android Studio
- 2 ответа
- Новые версии
- Старые версии
- Для Mac
- Vertical Line in Android Studio
- Answers
- Newer versions
- Older versions
- For Mac
- Ориентация
- Вступление
- Узнать ориентацию программно
- Кручу-верчу, запутать хочу!
- Установить ориентацию программно и через манифест
- Запрет на создание новой активности
- Исчезающий текст
- Проверка на существование
- Запоминаем значения переменных
- Ориентация у фрагментов
- Жизненный цикл при повороте
How to draw Horizontal and Vertical lines in an Android App using XML
This article demonstrates how to draw a horizontal and a vertical line in an Android app.
Although we have countless XML tags to meet almost all of our needs, unfortunately, we don’t have any tag such as tag to draw the line. However, tag can be used in XML as a workaround.
Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.
NOTE: The “view” tag is different than the View class in Android.
How to draw a Vertical line?
Consider the following XML code to draw a Vertical line in Android:
Here, we use the “View” tag to create a rectangle with a very small width such that it becomes a vertical line. In the above code, a red vertical line of height ‘560dp’ and width ‘2dp’ is drawn which is at a left margin of ‘175dp’ from the left side of the screen and at a top margin of ’20dp’ from the TextView that lies above it. The thickness of this line can be increased or decreased by increasing and decreasing the layout_width of the “View” tag respectively.
Note: To run this code, we can copy and paste this code into the XML Visualizer provided by Udacity. Make sure to erase all the previously written code in the visualizer(if any).
Output:
Drawing a Horizontal line:
A horizontal line can be drawn in a very similar way as a vertical line. Following is the XML code for a horizontal line:
Источник
Как нарисовать линию в android
Может ли кто-нибудь сказать, как нарисовать линию на Android, возможно, с примером?
Это рисует 2 линии, которые образуют крест в верхнем левом углу экрана:
DrawView.java
StartDraw.java
Если вы хотите, чтобы простая линия в макете разделяла два вида, вы можете использовать общий вид с высотой и шириной, которые вы хотите иметь в строке, и заданным цветом фона.
При таком подходе вам не нужно переопределять представление или использовать Canvas самостоятельно, просто и просто добавить строку в xml.
Пример кода, который я предоставил, будет генерировать линию, которая заполняет экран шириной и имеет высоту одного дп.
Если у вас возникли проблемы с рисованием линии на маленьких экранах, подумайте об изменении высоты линии на px. Проблема в том, что на экране ldpi линия будет высотой 0,75 пикселя. Иногда это может привести к округлению, что приводит к исчезновению линии. Если это проблема для вашего макета, определите ширину строки в файле ressource и создайте отдельный файл ressource для небольших экранов, который устанавливает значение 1px вместо 1dp.
Этот подход можно использовать только в том случае, если вы хотите использовать горизонтальные или вертикальные линии, которые используются для разделения элементов макета. Если вы хотите достичь чего-то вроде креста, который втягивается в изображение, мой подход не будет работать.
Существует два основных способа рисования линии, используя Canvas или с помощью представления.
Рисование линии с холстом
Из документации мы видим, что нам нужно использовать следующий метод:
Объект Paint просто сообщает Canvas какой цвет для рисования линии, насколько она широка и т. Д.
Вот пример кода:
Рисование линии с представлением
Если вам нужна только прямая горизонтальная или вертикальная линия, самым простым способом может быть просто View в вашем файле макета xml. Вы бы сделали что-то вроде этого:
Вот изображение с двумя строками (одна горизонтальная и одна вертикальная), чтобы показать, как это будет выглядеть:
И вот полный макет xml для этого:
Вы можете нарисовать несколько прямых линий на виду, используя пример рисования пальцев, который находится в Developer android. Пример ссылки
Просто комментарий: mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); Вы сможете рисовать прямые линии.
Для горизонтальной линии на макете:
Для вертикальной линии на макете:
Это создаст прямую горизонтальную линию, надеюсь, что это поможет !.
Этот код добавляет горизонтальную линию к линейной компоновке
Вы можете сделать рисованный круг, линию, прямоугольник и т. Д. Через фигуры в xml следующим образом:
Чтобы улучшить ответы, предоставленные @Janusz
Я добавил это к моим стилям:
Тогда в моих макетах меньше кода и проще читать.
Если вы хотите сделать горизонтальное межстрочное расстояние, то сделайте выше.
И для вертикальной линии между двумя видами вам нужно заменить параметры android: layout_width (атрибуты) на android: layout_height
Еще один подход к рисованию линии программно с помощью ImageView
Источник
Вертикальная линия в Android Studio
Я не знаю почему, но иногда в Android Studio Editor отображается вертикальная линия , как показано на скриншоте ниже.
Не знаю о другом редакторе, но это происходит в Android Studio.
Так почему он показывает и как его скрыть?
2 ответа
Эта строка исторически представляет поле бумаги формата А4, что полезно, только если вам нужно напечатать код. Старая школа говорит, что вы должны держать свой код внутри этого поля, чтобы гарантировать большую переносимость.
Но .. в настоящее время в реальной жизни это не имеет смысла для меня! Потому что мы всегда используем продвинутые редакторы, большие дисплеи, и мне никогда не нужно было печатать ни одной строки кода ..
Итак, если вы хотите сделать это:
Новые версии
Редактор -> Общие -> Внешний вид -> Показать руководство по переносу
Старые версии
Редактор -> Общие -> Внешний вид -> Показать правое поле
Редактор -> Внешний вид -> Показать правое поле
Для Mac
Чтобы удалить строку, перейдите к: — Настройки-> Редактор -> Общие -> Внешний вид -> Показать жесткую пленку и визуальные руководства. Снимите флажок, чтобы удалить.
В новой версии Android Studio это выглядит следующим образом:
Источник
Vertical Line in Android Studio
I don’t know why but sometime in Android Studio Editor, it shows vertical line as shown in screenshot below.
Don’t know about other editor but it happens in Android Studio.
So why it is showing and how to hide it?
Answers
That line historically represents the margin of A4 paper, which is useful only if you need to print the code. Old school says that you should keep your code inside that margin, to guarantee much portability.
But.. nowadays in the real life, it makes no sense to me! Because we always use advanced editors, bigger displays, and I never needed to print any single line of code.
So, if you want to do it:
Newer versions
Editor -> General -> Appearance -> Show hard wrap guide
Older versions
Editor -> General -> Appearance -> Show right margin
Editor -> Appearance -> Show right margin
For Mac
To remove line go to:- Preference-> Editor -> General -> Appearance -> Show hard wrap and visual guides. Uncheck it to remove.
Visual Studio Code 0.10.10 introduced this feature. To configure it, go to menu File ? Preferences ? Settings and add this to to your user or workspace settings:
The color of the rulers can be customized like this:
I made a script for this using InternalEditorUtility.ReadScreenPixel .
At first I actually had it as you requested on a GUILayout.Button but decided to instead provide a more general solution here which is completely independent from the EditorWindow itself.
(You could still call EditorScreenshotExtension.Screenshot(); from the GUILayout.Button anyway.)
I rather added a global MenuItem with ShortCut so you actually can take a screenshot of any currently active (last clicked/focused) EditorWindow !
EditorScreenshotExtension.cs
Since it uses UnityEditor and UnityEditorInternal make sure to place it in a folder called Editor to exlude it from any builds.
After importing it to your project simply use CTRL + SHIFT + K to create a Screenshot of the currently active EditorWindow.
Screenshots are placed as PNG file in Assets/StreamingAssets with a timestamp in the name.
It will also add an entry to the top menu of the UniytEditor.
The current shortcut was just a random one which is not used so far. you can change it in [MenuItem(Screenshot/Take Screenshot %#k)] following the MenuItem docs
To create a hotkey you can use the following special characters:
- % ( ctrl on Windows, cmd on macOS)
- # ( shift )
- & ( alt )
- If no special modifier key combinations are required the key can be given after an underscore.
For example to create a menu with hotkey shift-alt-g use «MyMenu/Do Something #&g». To create a menu with hotkey g and no key modifiers pressed use _ like «MyMenu/Do Something _g».
Some special keyboard keys are supported as hotkeys, for example «#LEFT» would map to shift-left. The keys supported like this are: LEFT, RIGHT, UP, DOWN, F1 .. F12, HOME, END, PGUP, PGDN.
A hotkey text must be preceded with a space character («MyMenu/Do_g» won’t be interpreted as hotkey, while «MyMenu/Do _g» will).
Here in action — the first time I simply press CTRL + SHIFT + K after having focused the Project view last; the second time I focus the Inspector and use the menu item to take the screenshot
Источник
Ориентация
Вступление
Когда создавались первые портативные устройства — КПК и смартфоны, то за основу бралась настольная операционная система и допиливалась под мобильное устройство. Лишние функции удалялись, а некоторые функции добавлялись. Но при этом как-то совсем упустили из виду, что в отличие от громоздких мониторов и экранов ноутбуков, карманные устройства можно вращать в руках. Первые устройства не умели менять ориентацию экрана. Некоторые программисты самостоятельно стали создавать программы, которые умели переключаться в разные режимы. Затем эту возможность стали включать в настройки аппарата. Позже аппараты научились самостоятельно определять ориентацию экрана.
Всего существует два режима — портретный и альбомный. На большинстве телефонов используется по умолчанию портретный режим (как на паспорте). Альбомный режим знаком нам по обычным мониторам.
Рассмотрим следующий случай. Предположим, у нас в приложении имеется одно текстовое поле и шесть кнопок. Вроде всё нормально.
Но стоит нам повернуть устройство на 90 градусов, как сразу обнаруживаются проблемы. Пятая кнопка видна частично, а шестая вообще оказалась за пределами видимости. Непорядок!
Чтобы избежать такой проблемы, необходимо как-то по другому скомпоновать кнопки. Например, расположить их не подряд друг за другом, а разбить на пары. Воспользуемся контейнером TableLayout. С его помощью мы можем разбить кнопки на две колонки и поместить их в три ряда.
Для этой операции нам понадобится сделать несколько важных шагов. Сначала нужно создать новую подпапку в папке res. Выделяем папку res, вызываем из него контекстное меню и последовательно выбираем команды New | Android resource directory. В диалоговом окне из выпадающего списка Resource type: выбираем layout. В списке Available qualifiers: находим элемент Orientation и переносим его в правую часть Chosen qualifiers: с помощью кнопки с двумя стрелками. По умолчанию у вас появится имя папки layout-port в первой строке Directory Name:. Но нам нужен альбомный вариант, поэтому в выпадающем списке Screen orientation выбираем Landscape. Теперь название папки будет layout-land.
Можно обойтись без помощи мастера, создав папку сразу через меню New | Directory. Этот способ годится для опытных разработчиков, которые знают, как следует назвать папку. Важно запомнить, что имя даётся не произвольно, а именно в таком виде layout-land. По суффиксу -land система понимает, что речь идёт о новом режиме. Теперь нам осталось создать в созданной папке новый XML-файл activity_main.xml. Вызываем контекстное меню у папки layout-land и выбираем команды New | Layout Resource File. В диалоговом окне присваиваем имя activity_main.xml, которое должно совпадать с именем существующего файла. Во втором поле вводим LinearLayout, по мере ввода появится подсказка, облегчающая выбор.
Откроем созданный файл и модифицируем его следующим образом.
Запускаем приложение и проверяем. Отлично, теперь видны все кнопки. Поздравляю, вы гений!
Когда вы создаёте альтернативную разметку, то не забывайте включать все компоненты, к которым будете обращаться программно, иначе получите ошибку. Допустим, вы забыли добавить шестую кнопку. В портретном режиме программа будет работать, а когда пользователь перевернёт экран, то активность будет инициализировать все компоненты для работы, а кнопки-то и нет. Крах приложения и минусы в отзывах.
Узнать ориентацию программно
Чтобы из кода узнать текущую ориентацию, можно создать следующую функцию:
Вызовите данную функцию из нужного места, например, при щелчке кнопки и узнайте текущую ориентацию. В примере использовались две распространённые системные константы для ориентации. Есть ещё константа ORIENTATION_SQUARE (квадратный экран). Но я таких телефонов не встречал.
Можно также вычислить ширину и высоту экрана, если высота больше ширины, то устройство в портретной ориентации, иначе — в альбомной:
Сейчас этот код считается устаревшим и для вычисления размера экрана используются другие методы (описано в примере Экран).
Кручу-верчу, запутать хочу!
Хорошо, мы можем определить текущую ориентацию, но в какую сторону повернули устройство? Ведь его можно повернуть влево, вправо или вообще вверх тормашками. Напишем другую функцию:
Установить ориентацию программно и через манифест
Если вы большой оригинал и хотите запустить приложение в стиле «вид сбоку», то можете сделать это программно. Разместите код в методе onCreate():
Учтите, что в этом случае котам не очень удобно будет пользоваться вашим приложением.
Вы можете запретить приложению менять ориентацию, если добавите нужный код в onCreate().
Но указанный способ не совсем желателен. Лучше установить нужную ориентацию через манифест, прописав в элементе параметр android:screenOrientation:
Кстати, существует ещё один вариант, когда устройство полагается на показания сенсора и некоторые другие:
В Android 4.3 (API 18) появились новые значения (оставлю пока без перевода):
- userLandscape — Behaves the same as «sensorLandscape», except if the user disables auto-rotate then it locks in the normal landscape orientation and will not flip.
- userPortrait — Behaves the same as «sensorPortrait», except if the user disables auto-rotate then it locks in the normal portrait orientation and will not flip.
- fullUser — Behaves the same as «fullSensor» and allows rotation in all four directions, except if the user disables auto-rotate then it locks in the user’s preferred orientation.
- locked — to lock your app’s orientation into the screen’s current orientation.
После появления Android 5.0 зашёл на страницу документации и пришёл в ужас. Там появились новые значения.
Запрет на создание новой активности
На примере программной установки ориентации можно увидеть интересный эффект, о котором нужно помнить. Предположим у нас есть кнопка, позволяющая менять ориентацию. Заодно будем менять текст на кнопке, чтобы операция соответствовала надписи.
Теперь посмотрите, что у нас получилось. Запустите проект и нажмите на кнопку. Ориентация экрана поменялась, однако текст на кнопке остался прежним, хотя по нашей задумке он должен измениться.
Нажмём на кнопку ещё раз. Надпись изменится, но ориентация не сменится. И только повторный щелчок повернёт экран в обратную сторону.
По умолчанию, при смене ориентации Android уничтожает и пересоздаёт активность из кода, что подразумевает повторный вызов метода onCreate(). Поэтому при повороте активность устанавливала текст, определенный в onCreate(). В большинстве случаев это не мешает программе. Но если приложение воспроизводит видео, то при смене ориентации вызов onCreate() может привести к повторному началу воспроизведения (если так написан пример).
Чтобы активность не пересоздавалась, добавьте в манифест строчку для нужной активности:
При изменении ориентации система вызовет метод onConfigurationChanged(Configuration) и мы можем отловить поворот экрана:
В документации говорится, что данный способ следует избегать.
Исчезающий текст
Как уже говорилось, при смене ориентации активность пересоздаётся. При этом можно наблюдать интересный эффект с пропадающим текстом. Чтобы увидеть эффект, создадим два текстовых поля. Одному из них присвоим идентификатор, а другое поле оставим без него.
Запустите приложение, введите любой текст в обоих полях и смените ориентацию. Вы увидите, что у поля с идентификатором текст при повороте сохранится, а у поля без идентификатора текст исчезнет. Учитывайте данное обстоятельство.
К вышесказанному могу добавить, что при смене ориентации у поля с идентификатором вызывается метод onTextChanged():
Проверка на существование
Если вы используете две разные разметки, то возможна ситуация, когда в альбомной ориентации используется кнопка, которой нет в портретной ориентации. Это можете привести к ошибке в коде, поэтому нужно проверить существование кнопки:
На практике такое встречается редко, но помните на всякий случай.
Запоминаем значения переменных
С поворотом экрана возникает одна очень неприятная проблема. Вдумайтесь в значение слов, что при повороте экрана активность создаётся заново. Чтобы было понятно, нужно вернуться к проекту, в котором мы считали ворон. Если вы его удалили, то придётся пройти урок заново и восстановить его.
Щёлкните несколько раз по кнопке. Допустим на экране красуется надпись «Я насчитал 5 ворон». Поворачиваем экран — куда улетели все вороны? На экране появилась надпись, что . Впрочем, я не буду говорить вам, сами посмотрите.
А что собственно произошло? Я же вас предупреждал, что активность при повороте создаётся заново. А значит переменная mCount снова принимает значение 0, т.е сбрасывается в начальное значение.
Что же делать? Для этих целей у активности существует специальный метод onSaveInstanceState(), который вызывается системой перед методами onPause(), onStop() и onDestroy(). Метод позволяет сохранить значения простых типов в объекте Bundle. Класс Bundle — это простой способ хранения данных ключ/значение.
Создадим ключ с именем KEY_COUNT. В Android Studio c версии 1.5 появились живые шаблоны, позволяющие быстро создать ключ. Введите до метода onCreate() строчными буквами слово key, во время набора появится подсказка. Нажимаем Enter и получаем заготовку. После символа подчёркивания вводим название ключа. В результате получим ключ следующего вида.
Далее создаём метод onSaveInstanceState() после метода onCreate(). Во время набора имени метода подсказка покажет, что имеется два метода. Выбирайте метод с одним параметров (обычно он идёт вторым). Записываем в ключа значение счётчика.
А в методе onCreate() делаем небольшую проверку.
У метода в параметре содержится объект Bundle. Только здесь он назван savedInstanceState вместо outState, но пусть вас это не вводит заблуждение. Имена вы можете придумывать сами. Главное, что объект содержит сохранённое значение переменной при повороте. При первом запуске приложения объект не существует (null), а потом мы его создали своим кодом. Для этого и нужна проверка. Обратите внимание, что здесь мы не прибавляем единицу к счётчику, как у кнопки. Если скопировать код у кнопки, то получится, что счётчик будет увеличиваться самостоятельно при поворотах без нажатия на кнопку. Прикольно, конечно, но может ввести в заблуждение пользователя. Хотя, если вы пишите приложение «Я твой дом труба шатал», то такой способ может пригодиться для подсчёта, сколько раз вы вертели телефон, чтобы разрушить чей-то дом.
Обращаю ваше внимание, что данный способ используется для сохранения промежуточных результатов во время действия программы. В следующих уроках вы узнаете, как можно сохранять результат между запусками приложения.
Ориентация у фрагментов
Позже вы узнаете о существовании фрагментов. Может возникнуть такая ситуация, когда вы захотите выводить конкретный фрагмент в нужной ориентации. У фрагментов есть собственный жизненный цикл, и вы можете реализовать свой код в методах фрагмента:
Я с таким случаем не встречался, но оставлю как памятку.
Жизненный цикл при повороте
При повороте активность проходит через цепочку различных состояний. Порядок следующий.
Источник