Android studio конвертер величин

Конвертер «38 попугаев»

Пора опять написать какое-нибудь полезное приложение (напоминаю, что до этого мы написали хорошую программу Счётчик ворон). На этот раз напишем конвертер, который позволит нам узнать длину длиннокота не только в метрах, но и в попугаях. Если вы не знаете, кто такой длиннокот, то вам прямая дорога на мой блог Субкота-5. Надеюсь, что такое субкота, вы знаете?

Изучив данную технику, вы сможете написать собственные конвертеры. Например, вы сможете конвертировать доллары в тугрики, футы в метры, градусы Цельсия в градусы по Фаренгейту, свинец в золото, ну и так далее.

Подготовка

Создаём новый проект Converter и добавляем строковые ресурсы в файл res/values/strings.xml.

Открываем файл activity_main.xml в папке res/layout/ и настраиваем внешний вид экрана приложения. Удаляем глупую надпись Hello World!. Далее с панели инструментов перетаскиваем компоненты Plain Text, RadioGroup, RadioButton, Button.

Мы подготовили каркас приложения. Теперь сделаем небольшой тюнинг. Назначим необходимые свойства добавленным элементам. Свойства можно менять через отдельную панель Properties.

Давайте сделаем так, чтобы при вводе текста в текстовом поле по умолчанию появлялась цифровая клавиатура. Так удобнее будет пользователю вводить длину кота. Выделяем компонент EditText, находим у него свойство InputType, раскрываем его и ставим флажки у свойств numberSigned и numberDecimal.

Далее присвоим текст переключателям RadioButton. Мы заранее уже заготовили строковые ресурсы для переключателей. Поэтому нам нужно просто назначить нужные ресурсы в свойствах Text: radiobutton_meters и radiobutton_parrots. Убедитесь, что у первого переключателя у свойства Checked установлено значение true.

У кнопки для свойства Text мы используем строковый ресурс button_convert_text, а для свойства onClickonClick (Java-вариант).

Чтобы приложение не выглядело стандартным, присвоим свойству background у корневого элемента значение activity_color (цвет морской волны).

Изменим также идентификаторы по умолчанию на более понятные: editText, radio_button_meter, radio_button_parrot, button_converter.

Побудьте дизайнером, придумайте свои варианты. У меня получилось следующее.

Код разметки выглядит следующим образом:

Шкодим

Давайте писать код. Открываем файл активности MainActivity. Нам понадобятся два метода для конвертации величин и обработчик щелчка кнопки. При пустом значении текстового поля будем выводить Toast-сообщение. Начнём с двух методов.

Методы просты. Указываем количество попугаев и делим на магическое число 7.6 — получаем метры. И наоборот, указываем число метров и получим количество попугаев. Откуда взялось число 7.6 вы узнаете позже.

При щелчке кнопки получаем текст из текстового поля и в зависимости от того, какой переключатель активен, применяем нужный метод конвертации. Полный код.

Допустим, длина кота 10 метров. Вводим это значение при выбранном варианте «в метрах», переключаемся на «в попугаях» и нажимаем на кнопку. Получаем результат. В программе нет защиты от дурака и вам следует самому позаботиться, чтобы при вводе недопустимых символов программа не завершалась с ошибкой, а предупреждала пользователя.

Запускаем проект и любуемся новым приложением.

Заключение

Чтобы быть уверенным, что мы применяли научные методы при написании программы, обратимся к Google с поисковым запросом метры в попугаях

Правда, с момента написания статьи прошло много лет и Гугл уже не даёт такой результат, как на скриншоте.

Тем не менее, вам осталось поймать длиннокота и измерить его. Результаты необходимо показать коту и, тогда вас ждёт сюрприз! Кот от удивления произнесёт знаменитую фразу: А в попугаях я гораздо длиннее!

Источник

Единицы измерения

Исторически так сложилось, что разработчики всегда использовали пиксели при создании компьютерных интерфейсов. Но с развитием технологий данный подход стал источником проблем — на многих новых дисплеях элементы стали очень мелкими при установленных высоких разрешениях. Поэтому стали появляться новые единицы измерения, не зависящие от разрешения экрана.

Android поддерживает несколько стандартных единиц измерения. Вкратце перечислим их.

  • px (pixels) — пиксели. Точки на экране — минимальные единицы измерения;
  • dp (density-independent pixels) — независимые от плотности пиксели. Абстрактная единица измерения, основанная на физической плотности экрана с разрешением 160 dpi. В этом случае 1dp = 1px;
  • dip — синоним для dp. Иногда используется в примерах Google;
  • sp (scale-independent pixels) — независимые от масштабирования пиксели. Допускают настройку размеров, производимую пользователем. Полезны при работе с шрифтами;
  • in (inches) — дюймы, базируются на физических размерах экрана. Можно измерить обычной линейкой;
  • mm (millimeters) — миллиметры, базируются на физических размерах экрана. Можно измерить обычной линейкой;
  • pt (points) — 1/72 дюйма, базируются на физических размерах экрана;
Читайте также:  Телевидение андроид все каналы

Как правило, при установке размера текста используются единицы измерения sp, которые наиболее корректно отображают шрифты:

В остальных случаях рекомендуется использовать dp.

Переводим dp в пиксели

Так как на разных устройствах dp может различаться, то для получения величин в пикселях и наоборот используйте методы (float):

Часто точность не требуется и можно использовать целые числа int. Напишем аналогичные методы.

На Kotlin можно написать функцию-расширение:

Если вы не определили размеры в XML, то их можно задать программно с помощью следующего кода (устанавливаем отступы для компонента):

Настройка шрифтов

Давайте чуть подробнее поговорим о работе со шрифтами, чтобы лучше понять специфику работы с текстами. Все люди разные — у кого-то зрение хорошое, у кого-то плохое. Android позволяет в настройках задать размеры шрифта в четырёх вариантах: Мелкий, Обычный, Крупный, Огромный. Для этого нужно зайти в Настройки | Экран | Размер шрифта.

Можно узнать программно выбранный вариант через свойство fontScale:

Обычному шрифту соответствует значение 1, мелкому — 0.9, крупному — 1.1, огромному — 1.15.

Если вы хотите, чтобы ваш текст мог меняться в зависимости от выбора пользователя, то используйте единицы измерения SP:

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

Третий вариант — если вы ни при каких обстоятельствах (какой же вы упрямый) не хотите зависеть от предпочтений пользователя и разрешения экрана, то пользуйтесь PX (пиксели). Среда разработки будет сопротивляться вашему желанию и выводить предупреждающие сообщения. Подумайте ещё раз о своём решении.

Используем стандартные системные размеры шрифтов

В Android зашиты три системный размера шрифтов, основанных на SP: Small, Medium и Large. Вы можете использовать их в стандартных случаях, когда вам не нужно задавать конкретные значения (атрибут style):

На самом деле стилей @android:style/TextAppearance.* гораздо больше. Если вы вдруг забыли про названия стилей, то можете использовать встроенные возможности среды разработки. На панели инструментов виджет TextView представлен в четырёх вариантах: TextView, Large, Medium, Small, и в них используется атрибут android:textAppearance.

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

Источник

Урок 11. Room. Type converter

В этом уроке рассмотрим, как использовать конвертеры типов данных, чтобы Room мог сохранять не только поля-примитивы.

Полный список уроков курса:

Иногда ваши Entity объекты могут содержать поля, которые не являются примитивами, и не могут быть сохранены в БД.

В качестве примера рассмотрим класс работника. У него вполне может быть поле, в котором мы хотим перечислить его хобби. Используем для этого поле hobbies с типом List

Если мы попытаемся сейчас скомпилировать проект, то получим ошибку: Cannot figure out how to save this field into database. You can consider adding a type converter for it.

Room справедливо замечает, что понятия не имеет, как ему такое поле сохранить в базу, и предлагает использовать type converter.

Ок, давайте создадим конвертер. Он должен уметь конвертировать List в какой-нибудь простой тип, который может быть сохранен в базу, например, String. Также конвертер должен уметь конвертировать в обратную сторону, т.е. из String в List , чтобы Room мог прочесть данные из базы в поле Entity объекта.

Первый метод преобразует List в String. Второй — наоборот. Оба метода помечаем аннотацией TypeConverter.

Осталось указать этот конвертер для поля hobbies. Это делается аннотацией TypeConverters с указанием класса конвертера.

Теперь Room будет знать, что для поля hobbies он может использовать конвертер HobbiesConverter.

Конвертер также можно указать для всего Entity объекта. Это может быть полезно, если у вас в Entity несколько полей требуют конвертеры. Вы создаете один класс, там прописываете все необходимые методы преобразования полей, и указываете этот класс для всего Entity.

Читайте также:  Как сбросить с андроида фотки

Бывают случаи, когда преобразование может быть необходимо не только для Entity объекта. Рассмотрим пример.

Есть Entity класс

У работника все поля являются простыми, и Room без проблем может их сохранить/прочесть. Этим полям не нужны конвертеры.

Но что если мы хотим в Dao сделать так:

Т.е. нам для поиска по полю birthday (с типом long) удобнее использовать объект Date.

При попытке собрать проект получаем ошибку: Query method parameters should either be a type that can be converted into a database column or a List / Array that contains such type. You can consider adding a Type Adapter for this.

Room сообщает, что типы не совпадают и снова предлагает использовать конвертеры.

В нашем случае необходимо Date конвертировать в long, чтобы Room мог выполнить query запрос. Создаем для этого метод dateToTimestamp.

Обратная конвертация нам не нужна. У Room нет необходимости конвертировать long в Date. Объект Employee будет содержать дату в формате long.

Конвертер прописываем в Dao, прямо для конкретного параметра конкретного метода

Теперь Room конвертирует Date в long и запрос будет выполнен.

Также конвертер можно прописать для всего метода, а не отдельного параметра

В этом случае Room сможет использовать конвертер для преобразования всех параметров метода.

Если же прописать конвертер для Dao, то он будет доступен всем методам этого Dao

Ну и самое глобальное решение — прописать конвертер для Database

В этом случае Room сможет использовать его во всех Entity и Dao.

Если у вас несколько конвертеров, указывайте их через запятую.

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Create real time currency converter app in Android Studio

In this tutorial, we will learn to create a Currency converter app in android using java. We can develop an app in android either using java or kotlin. To develop an android project we can either use Eclipse IDE or we can directly use Android Studio (any version). We will use: exchangeratesapi.io API key here.

For Eclipse IDE we need to download and install Android SDK and ADT plugin and Android version which is a very lengthy process. So instead of Eclipse IDE, the Android studio is preferred by most of the developers.

In this tutorial, we will use Android Studio 3.6.3 (latest version).

To create a new project in android studio: currency converter

  1. Click on the file option on the upper right corner of our android studio screen.
  2. After that, we can select a project template.

Android Studio Screen

3. On clicking on the next option we will get the screen to configure the project. Here we can select the name of our project, package name, location to store our project, language, and minimum SDK.

4. Click on the finish button.

Android studio screen

Start coding

In the above figure, there are two options

In MainActivity.java we will write our java code and activity_main.xml we will design the view of our app.

To design the view of our app we will get two option

  1. We can directly drag and drop the required tool to our emulator.
  2. Write an XML code to design the view of our application.

MainActivity.java

The name of our package is com.example.myapplication.

We generally use Bundle to pass the data between various activities of Android. We can map the data from the string value to various data types with the help of parsing using Bundle.

The view is the rectangular piece of the area at the front end of our application.

Читайте также:  Хорошие телефоны андроиды 2021

Array Adapter converts the Array List of objects into view items that can be loaded into a listview container.

AppCompat is the set of libraries that are used to develop the app with various versions. This means when a new version of the android studio gets released the appcompat helps us to work with old libraries from the new version.

Gson is called google JSON and JSON stands for javascript object notation. It is used to convert data to JSON or XML code. This means when we pass any data to gson it takes the java object and returns a corresponding JSON.

Retrofit is the HTTP client it helps to retrieve and upload JSON via web services.

Oncreate()

In the onCreate method of our project, we created objects of TextView, EditText, spinner, and button.

Then we created a drop-down list in which we passed the currencies of several countries.

Then in the onClick method of our project, we are converting the values from the currency of one country to the currency of any other country depending on the choice of the user. We are using the package that we created to implement the libraries and function of google JSON and Retrofit to convert our currency. We just passing the values and with the help of functionalities of retrofit and GSON that we created in the package, we are converting the currency.

The res.getAsJsonObject(“conversion_rates”) method helps us to get the rates to which we need to multiply the currency to get the required currency.

Further SetText is used to display the result obtained by multiplying the currency entered and the rate generated on the front end of the app.

KamalInterface

Retrofit makes downloading XML or JSON data from web API easier.

In the package kamal, we are creating an instance of retrofit in retrofitInterface.

We are using Exchange Rates-API

In the retrofit interface, 1929988978e7cd9733e5e654 is the key to our API used.V6 is the version of the API.

Just enter your email id to get the API key.

Method getExchangeCurrency(@Path(“currency”) String currency) is used to get the rate of exchange of the currency.

In the above method, the “currency” is used because we are selecting the currency from the drop-down menu. Instead of currency, we can also write “USD”, “EUR”, etc.

KamalBuild

In kamalBuild, we are creating the instance of Retrofit in which we are passing the base address of our API and addConvertFactory method.

To run our application we need to add these dependencies in the Gradle file of our project.

These dependencies are for version 29.

XML Code

We can modify the front end of our app according to our needs. We can add images, background colors, etc.

To add an image we need to download an image and save it in the drawable folder. From there we can add it to our ImageView from the src option.

We can even add audio to our app. For adding any audio file we need to create a raw folder in our app and then we can add the audio file to our app.

In the above XML code, first of all, we set Layout to LinearLayout.

ImageView helps us to display images.

EdiText helps us to take input from the user.

The button helps us to perform any operation with the help of any method mentioned in the onClick function.

Spinner helps us to display a drop-down menu.

Spinner is used for creating a drop-down menu. We can modify our spinner, Button, EditText TextView, etc in our XML code.

Modifying spinner, Button, EditText, TextView, etc means adding curves, changing color, and much more to give an impressive and attractive look to the app.

In the above XML code, we are just creating id of our image views, button, spinner, text view, and edit view. And adjusting them according to the view we want.

Источник

Оцените статью