Android java получить значение

Ресурсы

Ресурс в приложении Android представляет собой файл, например, файл разметки интерфейса или некоторое значение, например, простую строку. То есть ресурсы представляют собой и файлы разметки, и отдельные строки, и звуковые файлы, файлы изображений и т.д. Все ресурсы находятся в проекте в каталоге res . Для различных типов ресурсов, определенных в проекте, в каталоге res создаются подкаталоги. Поддерживаемые подкаталоги:

  • animator/ : xml-файлы, определяющие анимацию свойств
  • anim/ : xml-файлы, определяющие tween-анимацию
  • color/ : xml-файлы, определяющие список цветов
  • drawable/ : Графические файлы ( .png , .jpg , .gif )
  • mipmap/ : Графические файлы, используемые для иконок приложения под различные разрешения экранов
  • layout/ : xml-файлы, определяющие пользовательский интерфейс приложения
  • menu/ : xml-файлы, определяющие меню приложения
  • raw/ : различные файлы, которые сохраняются в исходном виде
  • values/ : xml-файлы, которые содержат различные используемые в приложении значения, например, ресурсы строк
  • xml/ : Произвольные xml-файлы
  • font/ : файлы с определениями шрифтом и расширениями .ttf, .otf или .ttc, либо файлы XML, который содержат элемент

В общей сложности мы можем определить следующие типы ресурсов:

Логические значения Boolean

Файлы с расширением jpg и png

Файл xml с произвольным названием

Файл xml с произвольным названием

Файл xml с произвольным названием

Файл xml с произвольным названием

Файл xml с произвольным названием

Бинарные и текстовые ресурсы

Файлы мультимедиа (mp3, mp4), текстовые и другие файлы

Разметка графического интерфейса

Файл xml с произвольным названием

К примеру, если мы возьмем стандартный проект Android Studio, который создается по умолчанию, то там можем заметить наличие уже нескольких папок для различных ресурсов в каталоге res :

Ресурсы в Android Studio

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

Когда происходит компиляция проекта сведения обо всех ресурсах добавляются в специальный файл R.jar , который затем используется при работе с ресурсами

Применение ресурсов

Существует два способа доступа к ресурсам: в файле исходного кода и в файле xml.

Ссылка на ресурсы в коде

Тип ресурса в данной записи ссылается на одно из пространств (вложенных классов), определенных в файле R.java, которые имеют соответствующие им типы в xml:

  • R.drawable (ему соответствует тип в xml drawable )
  • R.id ( id )
  • R.layout ( layout )
  • R.string ( string )
  • R.attr ( attr )
  • R.plural ( plurals )
  • R.array ( string-array )

Например, для установки ресурса activity_main.xml в качестве графического интерфейса в коде MainActivity в методе onCreate() есть такая строка:

setContentView(R.layout.activity_main);

Через выражение R.layout.activity_main мы и ссылаемся на ресурс activity_main.xml, где layout — тип ресурса, а activity_main — имя ресурса.

Подобным образом мы можем получать другие ресурсы. Например, в файле res/values/strings.xml определен ресурс app_name:

Этот ресурс ссылается на строку. Чтобы получить ссылку на данный ресурс в коде java, мы можем использовать выражение R.string.app_name .

Доступ в файле xml

Нередко возникает необходимость ссылаться на ресурс в файле xml, например, в файле, который определяет визуальный интерфейс, к примеру, в activity_main.xml. Ссылки на ресурсы в файлах xml имеют следующую формализованную форму: @[имя_пакета:]тип_ресурса/имя_ресурса

  • имя_пакета представляет имя пакета, в котором ресурс находится (указывать необязательно, если ресурс находится в том же пакете)
  • тип_ресурса представляет подкласс, определенный в классе R для типа ресурса
  • имя_ресурса имя файла ресурса без расширения или значение атрибута android:name в XML-элементе (для простых значений).

Например, мы хотим вывести в элемент TextView строку, которая определена в виде ресурса в файле strings.xml:

В данном случае свойство text в качестве значения будет получать значение строкового ресурса app_name.

Метод getResources

Для получения ресурсов в классе Activity мы можем использовать метод getResources() , который возвращает объект android.content.res.Resources . Но чтобы получить сам ресурс, нам надо у полученного объекта Resources вызвать один из методов. Некоторые из его методов:

  • getString() : возвращает строку из файла strings.xml по числовому идентификатору
  • getDimension() : возвращает числовое значение — ресурс dimen
  • getDrawable() : возвращает графический файл в виде объекта Drawable
  • getBoolean() : возвращает значение boolean
  • getColor() : возвращает определение цвета
  • getColorStateList() : возвращает объект ColorStateList — набор цветов
  • getFont() : возвращает определение шрифта в виде объекта Typeface
  • getFloat() : возвращает значение float
  • getLayout() : возвращает объект XmlResourceParser, связанный с файлом layout

Это только некоторые методы. Но все они в качестве параметра принимают идентификатор ресурса, который надо получить. Вкратце рассмотрим их применение. Возьмем тот же файл res/values/strings.xml в качестве источника ресурсов, который в моем случае выглядит так:

И изменим код MainActivity:

package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); // получение ресурсов из файла values/strings.xml String app_name = getResources().getString(R.string.app_name); TextView textView = new TextView(this); textView.setTextSize(30); textView.setText(app_name); setContentView(textView); >>

Здесь, используя метод getResources() получаем все ресурсы и затем используем их для устаноки значений свойств графических элементов. При запуске приложения мы увидим применение полученных ресурсов:

Использование ресурсов в Android Studio

Подобным образом мы можем программно получать и другие ресурсы и использоват их в приложении. Однако следует отметить, что в данном случае нам не нужно использовать метод getResources() и вообще производить какие-то определенные действия по получению ресурса, поскольку метод setText() класса TextView поддерживает прямую установку текста по идентификатору ресурса:

textView.setText(R.string.app_name);

Источник

Android java получить значение

Ресурсы строк — один из важных компонентов приложения. Мы используем их при выведении названия приложения, различного текста, например, текста кнопок и т.д.

XML-файлы, представляющие собой ресурсы строк, находятся в проекте в папке res/values . По умолчанию ресурсы строк находятся в файле strings.xml , который может выглядеть следующим образом:

Ресурсы строк в Android и Java

В самом простом виде этот файл определяет один ресурс «app_name», который устанавливает название приложения, которое мы видим в заголовке приложения на экране устройства. Но естественно мы можем определить любые строковые ресурсы. Каждый отдельный ресурс определяется с помощью элемента string , а его атрибут name содержит название ресурса.

Затем в приложении в файлах кода мы можем ссылаться на эти ресурсы:

String application_name = getResources().getString(R.string.app_name);

Например, изменим файл res/values/strings.xml следующим образом:

Здесь добавлен ресурс message со значением «Hello Android!».

Теперь используем ресурс в файле activity_main.xml:

С помощью выражения @string/message передаем атрибуту android:text значение из ресурса.

Ресурсы строк из strings.xml в Android Studio и Java

Аналогично мы могли бы использовать ресурс в коде Activity:

package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // получаем элемент textView TextView textView = findViewById(R.id.textView); // переустанавливаем у него текст textView.setText(R.string.message); >>

Если нам в принципе надо получить ресурс в коде Java (необязательно для установки текста в TextView), то в этом случае можно использовать метод getResources().getString(идентификатор_ресурса)

String message = getResources().getString(R.string.message);

Хотя по умолчанию для ресурсов строк применяется файл strings.xml, но разработчики могут добавлять дополнительные файлы ресурсов в каталог проекта res/values . При этом достаточно соблюдать структуру файла: он должен иметь корневой узел и иметь один или несколько элементов .

Так, нажмем на папку res/values правой кнопкой мыши и в появившемся списке выберем пункт New -> Value Resource File :

Добавление ресурса строк в Android Studio

Причем следует отметить, что данный тип файлов будет характерен для любого типа ресурсов, который добавляется в папку res/values .

После этого нам будет предложено определить для файла имя:

String resources in Android Studio

Назовем, к примеру, headers (название файла произвольное), а для всех остальных полей оставим значения по умолчанию. И в папку res/values будет добавлен новый файл headers.xml. Определим в нем пару ресурсов:

  Добро пожаловать Нажмите на кнопку  

И после этого мы сможем использовать определенные здесь ресурсы в коде Activity или в файле layout.

Форматирование строк

Android позволяет применять к ресурсам строк форматирование. Например, изменим файл strings.xml:

 ViewApp Hello Android! Добро пожаловать %1$s! Уже %2$d : %3$d  

Третий ресурс — welcome_message представляет строку с форматированием. Так, она содержит такие символы как %1$s, %2$d и %3$d. Что они означают? %1$s указывает, что это первый аргумент, а символ «s» говорит, что этот аргумент представляет строку. %2$d представляет второй аргумент, а символ «d» в конце указывает, что это будет целое число. Аналогично %3$d указывает, что это третий аргумент, который представляет целое число.

Получим ресурс в коде Java

package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import android.content.res.Resources; import android.os.Bundle; import android.widget.TextView; import java.util.Calendar; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); Resources res = getResources(); String userName = "Евгений"; Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); String text = getString(R.string.welcome_message, userName, hour, minute); TextView textView = new TextView(this); textView.setText(text); textView.setTextSize(28); setContentView(textView); >>

Метод getString(R.string.welcome_message, userName, hour, minute) получает ресурс welcome_message и в качестве последующих параметров передает его аргументам значения. Для первого аргумента-строки используется переменная userName, а для второго и третьего аргументов передаем текущее количество часов и минут, полученных с помощью класса Calendar.

Форматирование ресурса в string.xml в Android и Java

Ресурсы Plurals

Plurals представляют еще один вид набора строк. Он предназначен для описания количества элементов. Для чего это надо? К примеру, возьмем существительное: нередко оно изменяет окончание в зависимости от числительного, которое с ним употребляется: 1 цветок, 2 цветка, 5 цветков. Для подобных случаев и используется ресурс plurals .

Посмотрим на примере. Добавим в папку res/values новый ресурс. Назовем его flowers :

Ресурс Plurals в Android Studio

Изменим его содержимое следующим образом:

   %d цветок %d цветка %d цветков   

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

Сами наборы строк вводятся дочерними элементами . Этот элемент имеет атрибут quantity , который имеет значение, указывающее, когда эта строка используется. Данный атрибут может принимать следующие значения:

  • zero : строка для количества в размере 0
  • one : строка для количества в размере 1 (для русского языка — для задания всех количеств, оканчивающихся на 1, кроме 11)
  • two : строка для количества в размере 2
  • few : строка для небольшого количества
  • many : строка для больших количеств
  • other : все остальные случаи

Причем в данном случае многое зависит от конкретного языка. А система сама позволяет определить, какое значение брать для того или иного числа.

Использование данного ресурса возможно толко в коде java. Поэтому изменим код MainActivity:

package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); String rose = getResources().getQuantityString(R.plurals.flowers, 21, 21); TextView textView = new TextView(this); textView.setText(rose); textView.setTextSize(26); setContentView(textView); >>

С помощью метода getQuantityString мы получаем значение ресурса. Первым параметром передаем идентификатор ресурса. Вторым параметром идет значение. для которого нужно найти нужную строку. Третий параметр представляет собой значение, которое будет вставляться на место плейсхолдера %d . То есть мы получаем строку для числа 21.

Определение ресурса plurals в Android

string array

Еще одним видом строковых ресурсов является string-array или массив строк. Например, добавим в папку res/values новый файл, который назовем languages.xml :

Определение ресурса string array в Android и Java

Пусть он будет содержать следующий код:

Ресурс задается с помощью элемента . Фактически он определяет набор строк. А каждая отдельная строка задается с помощью элемента

В файле MainActivity.java определим код для получения значений из этого ресурса:

package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import android.content.res.Resources; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); Resources res = getResources(); String[] languages = res.getStringArray(R.array.languages); String allLangs = ""; for (String lang: languages) < allLangs += lang + " "; >TextView textView = new TextView(this); textView.setText(allLangs); textView.setTextSize(28); setContentView(textView); > >

С помощью метода getStringArray получаем ресурс в массив строк и затем с помощью цикла складдываем из массива одну строку и передаем ее в TextView.

Источник

Читайте также:  Html тег meta атрибуты
Оцените статью